2008-10-07 209 views
31

¿Alguien sabe una forma de convertir el código VB6 a C#?¿Cómo puedo convertir el código VB6 a C#?

¿Hay alguna herramienta que pueda hacer esto por mí?

+0

¿Puede proporcionar el código? – Inisheer

+0

Sospecho que hay una pregunta interesante en algún lado. ¿Puede darnos más detalles? –

+0

Voy a cerrar esto, abra una pregunta e incluya información relevante en ella. – UnkwnTech

Respuesta

25

VisualStudio ofrece (o al menos se ofrece) un asistente para realizar una conversión de VB6 a VB.NET (que luego podría convertirse en C# con un poco de trabajo, posiblemente ayudado por # develople's VB.NET < -> C# convertidor), pero cuando lo utilicé por última vez, para cualquier cosa no trivial hubo que hacer mucho trabajo manual, así que sospecho que probablemente sea mejor reescribir o portar a mano si se trata de una aplicación grande y/o importante.

+1

Ese producto fue creado por ArtinSoft (ahora Mobilize.Net) y evolucionó al VBUC. – willvv

8

Abra su proyecto con una nueva versión de Visual Studio, convierta su código a VB.Net y luego descargue .Net Reflector para ayudarlo con la transformación de C#.

¡Buena suerte!

+6

Esta respuesta es engañosa ya que la conversión de VB6 está llena de cambios sutiles y brutos en el comportamiento. No hagas esto. Es mejor tener un plan metódico para la conversión que trate a .NET como una plataforma separada, luego confíe en cualquiera de las herramientas de conversión. –

+0

todavía, creo que es un mejor enfoque que solo tener un método ... – sebagomez

+1

¡Buena suerte es la correcta! Para cualquier programa no trivial hay una mejor oportunidad de ganar la lotería que producir algo útil con este método. :) –

8

Artinsoft (ahora renombrado como Mobilize.Net) hace exactamente esto, específicamente el Visual Basic Upgrade Companion.

Sin embargo, incluso después de usar el VBUC, todavía hay partes del sistema que deben migrarse/revisarse a mano. Pero generalmente es un conjunto mucho más pequeño del problema original. Y algunos de los problemas de migración se han resuelto gracias a la experiencia con migraciones anteriores.

Artinsoft es la misma compañía que creó el asistente que se incluye con Visual Studio, mencionado en la publicación de theraccoonbear. Sin embargo, si no me equivoco, el asistente solo migra VB6 a VB.Net.

La revelación completa: Yo trabajo para Artinsoft

+0

Esteban. ¿Hay límites en la cantidad de veces que el vbuc se puede ejecutar en los archivos? Me refiero a esta declaración en su sitio web "La licencia es por aplicación, lo que permite ejecutar el VBUC varias veces en los mismos archivos VB6". – kjack

+0

Si no me equivoco, básicamente tendrá un tiempo limitado (generalmente 1 año) durante En ese momento puedes migrar tantas veces como quieras. La licencia en sí es bastante permisiva una vez que llega a la ejecución real. En la mayoría de los casos, ArtinSoft solo confía en que el cliente haga lo correcto según los términos de la licencia. –

+0

Gracias por la información, Esteban, eso suena mucho mejor que la cita que di, que sugiere un límite bastante restrictivo. – kjack

11

Podría venir a través como un poco descarado pero su cerebro podría ser la mejor herramienta a utilizar. Podría valer la pena volver a escribir.

Quizás no necesite portarlo. ¿Podría el VB6 convertirse en un componente COM? Puerto a COM, llamada desde C#, inicio a tiempo para Judge Judy.

+3

"[...] hogar a tiempo para el juez Judy" ¡invaluable! – theraccoonbear

+1

+1 por la idea de convertirlo en COM. – N0Alias

4

La respuesta corta es que VB6 y VB.NET (y por lo tanto C#) están lengua separada pero las lenguas relacionadas. Hay muchas diferencias sutiles (el entero es Int32 en lugar de Int16) y las diferencias groseras (gráficos, formularios y motores de impresión) entre las dos plataformas. Debe tratar esto como si estuviera convirtiendo a una plataforma completamente diferente.

Los temas se estudian con mayor detalle aquí

How to Switch a Large App from VB6 to VB.NET

9

Como alguien que ha hecho un montón de veces, esto no es un proceso fácil. Puede usar la herramienta VB6 a VB.Net como se indica en this answer, y luego usar Reflector o SharpDevelop para convertir a C#. Con la conversión de SharpDevelop, algunas advertencias. Atornilla todas las referencias de matriz y cree que son llamadas de función, y todos los operadores lógicos se convierten en operadores lógicos bit a bit (Y se convierte en & no en & &). Con Reflector pierdes un montón de cosas.Además, el convertidor de Visual Studio falla en muchos proyectos grandes, simplemente se cuelga y nunca termina.

Una vez que tenga su código convierte en C#, usted tiene que comenzar el verdadero trabajo. La conversión te lleva al 50% del camino, tienes que arreglar un montón de cosas (verás tu código lleno de TODO), refactorizar un montón de cosas, y al final te queda C# que es un Representación de su VB6: a menos que tenga un código VB6 muy agradable, no es un lugar en el que realmente desea estar. Además, todo su código debe estar repleto de los ayudantes de VB en lugar de usar funciones DotNet adecuadas (todas las funciones de cadena son ayudantes en lugar de objetos de clase, por ejemplo0. Si utilizó variantes en absoluto, todas deben ser reescritas. muchas llamadas API, tienden a necesitar una reescritura.

Al final obtendrá una base, pero la conversión de un proyecto grande (20-30 formularios, 30 clases, 30 módulos) puede llevar varios meses. Sin embargo, puede tomar el doble de tiempo y perder toda la lógica de su negocio. Por lo tanto, se puede hacer (lo he hecho con 3 o 4 proyectos grandes), pero no existe una panacea, una solución mágica ni ninguna herramienta que dice que lo hará por usted solo, está. tumbado

+0

si su trabajo real solo comienza cuando el código se convierte en C# ¿por qué no lo deja en vb.net? ¿Las personas que realizaban el análisis de costo-beneficio tomaron una decisión informada? – kjack

+0

Oh, hay mucho trabajo por hacer si solo convierte a VB.Net, pero no tiene sentido hacer ese trabajo en VB.Net si va a traducir a C#, corrige en el idioma que planea Terminar pulg. Transmitimos algunos proyectos de VB6 a VBNet, pero nuestros desarrolladores son mucho más productivos en C#. –

1

Una pregunta que debe hacerse es, ¿cuán importante es que h ave C# en lugar de VB.NET? Si está convirtiendo una aplicación grande, quizás debería simplemente actualizar a VB.NET, que será más económico.

Hay algunas características en VB6 sin equivalente exacto en C# (el manejo de errores, el enlace en tiempo, etc). Pregúntese por qué vale la pena el esfuerzo manual para convertir esos, cuando podría ir a VB.NET, que los admite.

Y si no me cree (¡y nadie votó por mi respuesta, sollozo de sollozos!) Tal vez usted creerá Francesco Balena y Dan Appleman (en un libro Moving to VB.NET) que están de acuerdo conmigo.

1

En GreatMigrations, que hacerlo a mano - usamos nuestras manos para desarrollar un compilador de VB6/COM. El compilador lee un VBP (o grupo de VBP relacionados) y hace referencia a las bibliotecas COM y construye un "modelo semántico". Este modelo es un conjunto extremadamente detallado de tablas de símbolos y secuencias de códigos de operación que describen de manera completa y precisa todas las estructuras de información definidas y las operaciones realizadas por el sistema fuente.

continuación, la herramienta se aplica una serie de algoritmos que modifican y reestructurar el modelo para que sea más compatible con .NET y, opcionalmente, se aplica transformaciones personalizadas; por ejemplo, para reemplazar componentes COM con clases .NET. Las reglas de transformación están diseñadas por personas y creadas "a mano" para cumplir con sus requisitos únicos.

Finalmente, el modelo se "ejecuta" pero en lugar de asignar el modelo de datos y ejecutar las operaciones, creamos las estructuras de archivos, el modelo de datos y las operaciones en la notación de la plataforma de destino. Podemos autorizar tanto VB.NET como C# utilizando este enfoque. También utilizar este proceso para migrar sitios ASP a ASPX, (también tenemos un producto de múltiples dialecto FORTRAN a C)

El enfoque no produce la producción de software listo en el primer intento, pero se puede mejorar y hecho para producir software "mejor" modificando la configuración de la herramienta y volviendo a ejecutar el proceso de traducción. La ventaja de nuestra herramienta es su repetibilidad, velocidad y flexibilidad, lo que facilita una metodología ágil de reescritura asistida por herramientas. OMI, los equipos de migración que aprovechan nuestro enfoque se beneficiarán al asignar muchos más recursos para evaluar alternativas para el rediseño y las mejoras del proceso de desarrollo en lugar de volver a reunir los requisitos funcionales, la codificación manual y las pruebas. En última instancia, disfrutarán de un sistema más sostenible y una reproducción mucho más fiel de la funcionalidad de la aplicación original después de la migración, así como un mayor control y visibilidad durante la migración.

una edición de prueba de nuestra herramienta está disponible aquí gmStudio Trail Request Download.Le permitirá experimentar con códigos ASP/VB hasta 10K LOC y ejecutar hasta 30 sesiones.

+1

La versión de prueba ofrece bastante inútil, y no es fácil de ver si este producto ofrece algo de valor a los convertidores VB6-despistados ... –

3

Microsoft recomienda ArtinSoft’s Visual Basic Upgrade Companion (VBUC).

Microsoft y ArtinSoft se han asociado para ofrecer una licencia VBUC libre a usted. El siguiente código de descuento se puede usar para comprar una licencia que le permitirá migrar una aplicación de hasta 10,000 líneas de código VB6 a VB.NET o C# gratis. También se puede aplicar al comprar una licencia más grande.

No es perfecto, el código resultante aún requiere muchas correcciones manuales hasta que se compila, pero aún así esta herramienta vale la pena intentarlo.

Cuestiones relacionadas