2010-01-22 32 views
5

Tengo una solución de vb.net y quiero agregar allí un nuevo archivo dll escrito en C# y usar la funcionalidad de la DLL, en el código escrito en vb.net.Mezclando el código de VB.net con el código de C#

Hice varios usos y parece funcionar bien, pero es una cosa inteligente hacer messing vb.net code con C# como quiero hacer.

¿Y qué peligros de lo que estoy haciendo?

Muchas gracias por su ayuda.

Respuesta

11

Su DLL no es una DLL C#, es una DLL .NET. Una vez compilado, todo lo que tiene es IL, no importa de qué idioma proviene. No debería haber ningún problema, a menos que encuentre uno de los casos de borde impar donde la interfaz DLL incluye algo que no es compatible con Visual Basic. Pero esto sería un caso extremo.

La especificación de lenguaje común, o CLS, define el subconjunto de características de .NET que debe admitir un lenguaje .NET, y si su DLL es compatible con CLS, puede usarlo sin problemas. Si está confundido acerca de la diferencia entre el CLS, CTS, CLR, etc., entonces encontré la cobertura en this book muy útil, aunque es principalmente un libro de C#.

+0

OP pregunta si es lo correcto * hacer, ya que ya tiene esa combinación de idiomas en su lugar –

+1

Esto es 95% - 99,99% verdadero pero no 100% verdadero. Es por eso que hay una especificación de lenguaje común. Marque la DLL como compatible con CLS, y eso debe garantizar al 100% que puede llamar desde cualquier lenguaje CLS (por ejemplo, VB.Net). http://stackoverflow.com/questions/2117776/mixing-vb-net-code-with-c-code/2117937#2117937 – MarkJ

+0

@Mark - gracias, claramente no estoy disparando en todos los cilindros de hoy. Supongo que es por eso que no estoy en el trabajo. De todos modos, he editado la respuesta. –

3

Puede mezclar código VB y C# en el mismo proyecto. He trabajado en varios proyectos que los han mezclado y no tienen problemas.

La combinación de idiomas parece estar mucho más aislada: una solución con varias DLL C# y proyectos vb.

No veo muchos problemas con eso.

+6

Seguramente quiso decir "misma solución"? Mezclar en un proyecto no puede funcionar. –

+0

Puede funcionar en un proyecto de "sitio web" de ASP.NET. –

+0

Es posible tener dos idiomas en el mismo proyecto, pero no en el mismo archivo. –

0

Creo que el mayor peligro es tener un desarrollador que conozca ambos idiomas; mientras que C# y VB.NET son similares porque están vinculados a .NET framework, tienen algunas peculiaridades.

Encontrará muchos programadores buena C# y VB.NET muchos buenos programadores, pero puede ser un poco más difícil encontrar un buen programador para ambos idiomas

También, echar un vistazo a este artículo: A Manager’s Retrospective on the C# versus VB.NET decision ya que habla de otros elementos a tener en cuenta, como las preferencias del desarrollador, las características del idioma y el reclutamiento. Se encontró

+0

No soy yo ni el otro programador que trabajamos en ese proyecto, no conocemos en absoluto el lenguaje vb. Así que realmente queremos pasar a C#. –

+0

podría hacer referencia a los ensamblajes de vb.net, tal como lo hace, e intentar comprar tiempo con su jefe para crear una solución que use un solo idioma; puedes justificar eso hablando de productividad –

1

Una solución here:

Sin embargo, es posible utilizar idiomas diferentes en un solo proyecto . Es posible que deba escribir el comando archivo de compilación de línea para compilar el proyecto. En .NET Framework SDK, hay una muestra en él. Puede acceder a él en C: \ Archivos de programa \ Microsoft Visual Studio .NET \ FrameworkSDK \ Samples \ Technologies \ CrossDevLan guage.

Este ejemplo demuestra el uso de lenguajes de desarrollo diferentes en un proyecto simple . Esta muestra crea dos conjuntos. El primero es una biblioteca o conjunto DLL que define una clase base simple escrita en extensiones administradas para C++.El segundo conjunto es un ensamblado ejecutable que define tres clases derivadas escritas en C#, VB e IL (Idioma intermedio). Estos tipos se derivan entre sí y finalmente de la clase base escrita en C++ administrado. Finalmente, el ejecutable crea instancias de cada uno de los tipos derivados y llama a un método virtual para cada uno. .NET Framework es un entorno donde varios desarrolladores pueden trabajar juntos sin problemas mientras desarrollan en el idioma de su elección.

Pero puede usar tanto el código VB.NET como el código C# dentro de la aplicación asp.net.

Es necesario crear dos carpetas (ex vbFolder y csFolder.) En la carpeta App_Code y escribir este código en web.config:

<system.web>  
<compilation>  
<CODESUBDIRECTORIES>  
<ADD directoryName="vbFolder" />  
<ADD directoryName="csFolder" />  
</CODESUBDIRECTORIES>  
</compilation>  
</system.web> 

buena explicación es here.

0

Ambos VB.NET & C# se compilan en MSIL (Microsoft Intermediate Language) código no nativo y esto para completar la compilación completa a nativo (máquina) en la máquina del usuario final mediante el trabajo de cuadros .NET existente que está en el máquina del usuario final así que si fuera .NET para el sistema operativo x su programa debería funcionar bien para el sistema operativo x y si era un sistema operativo y su aplicación debería funcionar bien con OS y, y esta es la solución que viene con la tecnología .NET deje el sistema operativo de aplicaciones .NET en Dependiente.

También hay un servicio COM Marshaler para admitir componentes antiguos (controles) para trabajar con aplicaciones .NET, por lo que puede invocar el control vb6 (* .ocx) en la aplicación de Windows C#.

y esta es una gran integración entre las tecnologías y técnicas de Microsoft.

y no hay necesidad de tener un buen desarrollador, tanto en VB.NET y C#, pero de ninguna manera si lo necesita, estoy aquí :)

pero la pregunta es ¿por qué estoy en ambos?

esto solo porque ofrezco entrenamiento, así que pensé en ampliar mis habilidades y me sorprendió que ambos estuvieran muy cerca excepto la sintaxis.

5

Marque su código como compatible con CLS, y luego el compilador de C# le advertirá si hace algo que pueda causar problemas cuando se invoca su DLL desde otro lenguaje .Net.

Algunas citas de MSDN

Para interactuar plenamente con otros objetos independientemente del idioma en que fueron implementados en, los objetos deben exponer a personas que llaman sólo aquellas características que son común a todas las lenguas que deben interoperar con. Por este motivo, se ha definido Common Language Specification (CLS), que es un conjunto de características de lenguaje básicas necesarias para muchas aplicaciones .

Puede marcar ensamblajes, módulos, tipos y miembros como CLS-obedientes usando CLSCompliantAttribute.

Algunos compiladores de lenguaje compatibles con CLS, such as the C# compiler, le permiten especifica que la intención de su código para ser compatible con CLS. Estos compiladores pueden verificar el cumplimiento de CLS y le permiten saber cuando su código usa la funcionalidad que no es compatible con CLS.

Además, su organización ahora necesitará conocimientos de C#, así como las habilidades de Vb.Net. Probablemente debería convencerse de que esto está bien y luego convencer a los tomadores de decisiones clave.

Cuestiones relacionadas