Кто-нибудь знает способ конвертировать код VB6 в C#?
Есть ли инструмент, который может сделать это для меня?
Есть ли какой-либо процесс миграции, которому я могу следовать, чтобы сделать это?
Кто-нибудь знает способ конвертировать код VB6 в C#?
Есть ли инструмент, который может сделать это для меня?
Есть ли какой-либо процесс миграции, которому я могу следовать, чтобы сделать это?
VisualStudio предлагает (или, по крайней мере, предлагает) мастер для преобразования VB6 в VB.NET (который затем может быть преобразован в C# с небольшой работой, возможно, с помощью конвертера #develop VB.NET ‹-> C#), но когда я в последний раз использовал его, для чего-либо нетривиального требовалось много ручной работы, поэтому я подозреваю, что вам, вероятно, лучше переписать или портировать вручную, если это большое и/или важное приложение.
Это может показаться немного дерзким, но ваш мозг может быть лучшим инструментом для использования. Может стоит переписать.
Возможно, вам не нужно портировать его. Можно ли превратить VB6 в COM-компонент? Перенос на COM, звонок с C#, домой как раз к судье Джуди.
Как человек, который делал это много раз, это не простой процесс. Вы можете использовать инструмент VB6 to VB.Net, как указано в этом answer, а затем используйте Reflector или SharpDevelop для преобразования в C#. С преобразованием SharpDevelop несколько предостережений. Он портит все ссылки на массивы и считает их вызовами функций, а все логические операторы преобразуются в побитовые логические операторы (И становится &, а не &&). С Reflector вы теряете кучу вещей. Кроме того, конвертер Visual Studio дает сбой во многих крупных проектах, просто зависает и никогда не завершается.
После того, как вы преобразовали свой код в C#, вы должны начать настоящую работу. Преобразование дает вам в лучшем случае 50% пути, вам нужно исправить кучу вещей (вы увидите, что ваш код замусорен TODO), провести рефакторинг тонны вещей, и в конце у вас останется C#, который является представление вашего VB6 - если только у вас нет очень красивого кода VB6, а не того места, где вы действительно хотите быть. Кроме того, весь ваш код должен быть замусорен помощниками VB, а не использованием правильных функций DotNet (все строковые функции являются помощниками, а не объектами класса, например 0. Если вы вообще использовали варианты, все они должны быть переписаны. Если вы использовали много вызовов API, они, как правило, нуждаются в переписывании.
В итоге вы получите базу, но конвертация большого проекта (20-30 форм, 30 занятий, 30 модулей) может занять несколько человеко-месяцев. Однако переписывание с нуля может занять в два раза больше времени, и вы потеряете всю свою бизнес-логику. Итак, это можно сделать (я сделал это с 3 или 4 большими проектами), но нет ни панацеи, ни серебряной пули, и любой инструмент, который говорит, что сделает это за вас одного, лжет.
Откройте свой проект в новой версии Visual Studio, преобразуйте свой код в VB.Net, а затем загрузите .Net Reflector, чтобы помочь вам с преобразованием C#.
Удачи!
Artinsoft (теперь переименован в Mobilize.Net) делает именно это, особенно Помощник по обновлению Visual Basic а>.
Тем не менее, даже после использования VBUC все еще есть некоторые части системы, которые необходимо перенести/проверить вручную. Но обычно это гораздо меньший набор исходной проблемы. И некоторые проблемы с миграцией были решены благодаря опыту предыдущих миграций.
Artinsoft — это та же компания, которая создала мастер, поставляемый с Visual Studio, упомянутый в сообщении theraccoonbear. Однако, если я не ошибаюсь, мастер только переносит VB6 на VB.Net.
Полное раскрытие: я работаю в Artinsoft
Короткий ответ заключается в том, что VB6 и VB.NET (и, следовательно, C#) — это отдельные языки, но родственные языки. Между двумя платформами есть много тонких (Integer — это Int32 вместо Int16) и существенных различий (графика, форма и механизмы печати). Вы должны относиться к этому так, как будто вы переходите на совершенно другую платформу.
Есть 2 бесплатных, которыми я пользуюсь:
http://www.carlosag.net/Tools/CodeTranslator/
http://www.developerfusion.co.uk/utilities/convertcsharptovb.aspx
Корпорация Майкрософт рекомендует помощник ArtinSoft по обновлению Visual Basic (VBUC).
Microsoft и ArtinSoft объединились, чтобы предложить вам бесплатную лицензию VBUC. Приведенный ниже код скидки можно использовать для приобретения лицензии, которая позволит вам бесплатно перенести приложение, содержащее до 10 000 строк кода VB6, на VB.NET или C#. Его также можно применить при покупке большей лицензии.
Он не идеален, полученный код по-прежнему требует множества ручных исправлений, пока он даже не скомпилируется, но тем не менее этот инструмент стоит попробовать.
Один вопрос, который следует задать себе: насколько важно иметь C#, а не VB.NET? Если вы конвертируете большое приложение, возможно, вам следует просто перейти на VB.NET, который будет дешевле.
В VB6 есть некоторые функции, не имеющие точного эквивалента в C# (обработка ошибок, позднее связывание и т. д.). Спросите себя, почему стоит вручную преобразовать их, когда вы можете перейти на VB.NET, который их поддерживает.
И если вы мне не верите (а за мой ответ никто не голосовал, рыдать рыдать!) возможно, вы поверите Франческо Балена и Дэн Эпплман (в книге Переход на VB.NET), которые согласны со мной.
В GreatMigrations мы делаем это вручную — мы используем свои руки для разработки компилятора VB6/COM. Компилятор считывает VBP (или группу связанных VBP) и библиотеки COM, на которые ссылаются, и строит «семантическую модель». Эта модель представляет собой чрезвычайно подробный набор таблиц символов и потоков кодов операций, которые полностью и точно описывают все информационные структуры, определенные и операции, выполняемые исходной системой.
Затем инструмент применяет ряд алгоритмов, которые изменяют и реструктурируют модель, чтобы сделать ее более совместимой с .NET, и при необходимости применяет пользовательские преобразования; например, чтобы заменить компоненты COM классами .NET. Правила трансформации разрабатываются людьми и создаются «вручную» для удовлетворения их уникальных требований.
Наконец, модель «выполняется», но вместо выделения модели данных и выполнения операций мы создаем файловые структуры, модель данных и операции в нотации целевой платформы. Используя этот подход, мы можем создавать как VB.NET, так и C#. Мы также используем этот процесс для переноса сайтов ASP на ASPX (у нас также есть многодиалектный продукт FORTRAN-to-C).
Этот подход не позволяет создавать готовое к производству программное обеспечение с первой попытки, но его можно улучшить и заставить производить «лучшее» программное обеспечение, изменив конфигурацию инструмента и повторно запустив процесс перевода. Преимущество нашего инструмента заключается в его воспроизводимости, скорости и гибкости, что облегчает гибкую методологию перезаписи с помощью инструмента. ИМО, команды миграции, которые используют наш подход, выиграют от выделения гораздо большего количества ресурсов для оценки альтернатив для редизайна и улучшения процесса разработки, а не для повторного сбора функциональных требований, ручного кодирования и тестирования. В конечном итоге они получат более удобную в сопровождении систему и гораздо более точное воспроизведение исходной функциональности приложения после миграции, а также больший контроль и прозрачность во время миграции.
Пробная версия нашего инструмента доступна здесь запрос на загрузку следа gmStudio. Это позволит вам экспериментировать с кодами ASP/VB до 10 000 LOC и запускать до 30 сеансов.