Есть ли какой-нибудь инструмент для миграции с VB6 на C#?

Кто-нибудь знает способ конвертировать код VB6 в C#?

Есть ли инструмент, который может сделать это для меня?

Есть ли какой-либо процесс миграции, которому я могу следовать, чтобы сделать это?


person basl    schedule 07.10.2008    source источник
comment
Я подозреваю, что где-то там есть интересный вопрос. Можете ли вы дать нам более подробную информацию?   -  person Mark Biek    schedule 07.10.2008
comment
Я собираюсь закрыть это, пожалуйста, откройте вопрос и включите в него соответствующую информацию.   -  person UnkwnTech    schedule 07.10.2008
comment
не настоящий вопрос не совсем подходит, но это лучшее, что я мог придумать.   -  person UnkwnTech    schedule 07.10.2008
comment
Я знаю, что легко закрыть вопрос, но и помочь ему было не так сложно. Я призываю вас рассмотреть вопрос о помощи в следующий раз вместо закрытия.   -  person GEOCHET    schedule 07.10.2008
comment
Не было причин закрывать этот вопрос, даже если ответ был НЕТ.   -  person Lance Roberts    schedule 07.10.2008
comment
@Rich трудно помочь, когда нет вопросов.   -  person UnkwnTech    schedule 07.10.2008
comment
@Unk: Я точно нашел это, как и ответчик. У вас всегда есть возможность позволить кому-то другому поработать над этим и просто проигнорировать его.   -  person GEOCHET    schedule 07.10.2008
comment
Я думаю, вопрос в том, знает ли кто-нибудь способ конвертировать код VB6 в С#?   -  person sebagomez    schedule 07.10.2008
comment
@Seba: Да, это было не очень сложно понять. Некоторым людям нужно быть немного более терпимыми к людям, для которых английский является вторым языком.   -  person GEOCHET    schedule 07.10.2008
comment
В этом я согласен с Rich B. Я думаю, что basl заслужил немного больше времени, чтобы конкретизировать свой вопрос.   -  person Mark Biek    schedule 07.10.2008
comment
@Марк: Спасибо. Я думаю, что для тех из нас, у кого есть представитель › 2000, довольно легко помочь людям, у которых есть проблемы с английским или с вопросами. Закрытие вообще не подходит для этой ситуации.   -  person GEOCHET    schedule 07.10.2008
comment
Я подумал, что это будет отличный вопрос. У меня самого есть множество кода VB6, который я хотел бы преобразовать в C#, и мне тоже любопытно. Общий, как это, я все еще думаю, что это хороший вопрос.   -  person Taptronic    schedule 07.10.2008
comment
Вы пытались опубликовать свой код VB на Stackoverflow.com? Этот инструмент может сделать это за вас, может быть, в первый раз...   -  person Jared Updike    schedule 07.10.2008
comment
В проекте мы пытались использовать gmStudio. Это будет производить код. Но факт остается фактом, это все равно будет код VB6 в моде. Кодирование по-прежнему такое же, как у VB. Если вы думаете об обновлении, почему бы не полностью переписать его, поскольку предстоит проделать большую работу даже после того, как инструмент конвертера сделал свою работу?   -  person auo    schedule 22.01.2016
comment
Вы можете использовать пакет VBUW VB.NET 2008 для преобразования в VB.NET, а затем преобразовать выходные данные в C# с помощью подключаемого модуля Visual Studio от команды Roslyn. Делал некоторые сам.   -  person R.J. Dunnill    schedule 01.10.2019
comment
Однако существует еще одна служба, которая преобразует код VB6 в C#. SELISE Phoenix предоставляет услугу (полностью функциональный преобразованный код) и постконверсионную поддержку компаниям, которые ее используют. phoenix.selise.ch   -  person Md. Ashaduzzaman    schedule 23.08.2020


Ответы (10)


VisualStudio предлагает (или, по крайней мере, предлагает) мастер для преобразования VB6 в VB.NET (который затем может быть преобразован в C# с небольшой работой, возможно, с помощью конвертера #develop VB.NET ‹-> C#), но когда я в последний раз использовал его, для чего-либо нетривиального требовалось много ручной работы, поэтому я подозреваю, что вам, вероятно, лучше переписать или портировать вручную, если это большое и/или важное приложение.

person theraccoonbear    schedule 07.10.2008
comment
Этот продукт был создан ArtinSoft (теперь Mobilize.Net) и превратился в VBUC. - person willvv; 15.09.2016

Это может показаться немного дерзким, но ваш мозг может быть лучшим инструментом для использования. Может стоит переписать.

Возможно, вам не нужно портировать его. Можно ли превратить VB6 в COM-компонент? Перенос на COM, звонок с C#, домой как раз к судье Джуди.

person Derek Smyth    schedule 07.10.2008
comment
[...] домой как раз к бесценному судье Джуди! - person theraccoonbear; 09.10.2008
comment
+1 за идею превратить его в COM. - person NoAlias; 09.03.2012

Как человек, который делал это много раз, это не простой процесс. Вы можете использовать инструмент 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 большими проектами), но нет ни панацеи, ни серебряной пули, и любой инструмент, который говорит, что сделает это за вас одного, лжет.

person Kris Erickson    schedule 08.10.2008
comment
если ваша настоящая работа начинается только тогда, когда код конвертируется в c#, ​​почему бы вам не оставить его в vb.net? Принимали ли люди, проводившие анализ затрат и выгод, обоснованное решение? - person kjack; 17.06.2010
comment
О, есть куча работы, если вы конвертируете только в VB.Net, но нет смысла делать эту работу в VB.Net, если вы собираетесь переводить на C#, исправьте это на языке, который вы планируете закончить. Мы перенесли несколько проектов с VB6 на VBNet, но наши разработчики намного продуктивнее работают на C#. - person Kris Erickson; 17.06.2010

Откройте свой проект в новой версии Visual Studio, преобразуйте свой код в VB.Net, а затем загрузите .Net Reflector, чтобы помочь вам с преобразованием C#.

Удачи!

person sebagomez    schedule 07.10.2008
comment
Этот ответ вводит в заблуждение, поскольку преобразование из VB6 наполнено как тонкими, так и грубыми изменениями в поведении. Не делай это. Лучше иметь методический план преобразования, который рассматривает .NET как отдельную платформу, а затем полагаться на любой из инструментов преобразования. - person RS Conley; 08.10.2008
comment
тем не менее, я считаю, что это лучший подход, чем просто метод... - person sebagomez; 08.10.2008
comment
Удачи прямо! Для любой нетривиальной программы больше шансов выиграть в лотерею, чем создать что-то полезное с помощью этого метода. :) - person Kevin Gale; 02.10.2009
comment
.Net Reflector плохо справляется с преобразованием из VBNet в C#, в процессе создается множество меток, переходов и т. д. Использование семантического преобразователя (например, найденного в CSharpDeveloper или подобном) намного лучше. - person Kris Erickson; 18.03.2010

Artinsoft (теперь переименован в Mobilize.Net) делает именно это, особенно Помощник по обновлению Visual Basic.

Тем не менее, даже после использования VBUC все еще есть некоторые части системы, которые необходимо перенести/проверить вручную. Но обычно это гораздо меньший набор исходной проблемы. И некоторые проблемы с миграцией были решены благодаря опыту предыдущих миграций.

Artinsoft — это та же компания, которая создала мастер, поставляемый с Visual Studio, упомянутый в сообщении theraccoonbear. Однако, если я не ошибаюсь, мастер только переносит VB6 на VB.Net.

Полное раскрытие: я работаю в Artinsoft

person Esteban Brenes    schedule 07.10.2008
comment
Эстебан. Существуют ли ограничения на количество запусков vbuc для файлов? Я имею в виду это утверждение на вашем веб-сайте. Лицензирование предоставляется для каждого приложения, что позволяет запускать VBUC несколько раз для одних и тех же файлов VB6. - person kjack; 17.06.2010
comment
Если я не ошибаюсь, вы в основном будете ограничены во времени (обычно 1 год), в течение которого вы можете мигрировать столько раз, сколько захотите. Сама лицензия довольно разрешительна, как только вы приступите к фактическому исполнению. В большинстве случаев ArtinSoft просто полагается на то, что клиент правильно соблюдает условия лицензии. - person Esteban Brenes; 18.06.2010
comment
Спасибо за информацию, Эстебан, это звучит намного лучше, чем цитата, которую я дал, которая наводит на мысль о довольно ограничительном ограничении. - person kjack; 19.06.2010
comment
Однако существует еще одна служба, которая преобразует код VB6 в C#. SELISE Phoenix предоставляет услугу (полностью функциональный преобразованный код) и постконверсионную поддержку компаниям, которые ее используют. phoenix.selise.ch - person Md. Ashaduzzaman; 23.08.2020

Короткий ответ заключается в том, что VB6 и VB.NET (и, следовательно, C#) — это отдельные языки, но родственные языки. Между двумя платформами есть много тонких (Integer — это Int32 вместо Int16) и существенных различий (графика, форма и механизмы печати). Вы должны относиться к этому так, как будто вы переходите на совершенно другую платформу.

person RS Conley    schedule 08.10.2008

Есть 2 бесплатных, которыми я пользуюсь:

http://www.carlosag.net/Tools/CodeTranslator/

http://www.developerfusion.co.uk/utilities/convertcsharptovb.aspx

person Scott and the Dev Team    schedule 07.10.2008
comment
Второй работает лучше первого - person sebagomez; 09.10.2008
comment
Оба они не конвертируют код VB6 - person bjan; 08.04.2016

Корпорация Майкрософт рекомендует помощник ArtinSoft по обновлению Visual Basic (VBUC).

Microsoft и ArtinSoft объединились, чтобы предложить вам бесплатную лицензию VBUC. Приведенный ниже код скидки можно использовать для приобретения лицензии, которая позволит вам бесплатно перенести приложение, содержащее до 10 000 строк кода VB6, на VB.NET или C#. Его также можно применить при покупке большей лицензии.

Он не идеален, полученный код по-прежнему требует множества ручных исправлений, пока он даже не скомпилируется, но тем не менее этот инструмент стоит попробовать.

person Konstantin Spirin    schedule 26.12.2012

Один вопрос, который следует задать себе: насколько важно иметь C#, а не VB.NET? Если вы конвертируете большое приложение, возможно, вам следует просто перейти на VB.NET, который будет дешевле.

В VB6 есть некоторые функции, не имеющие точного эквивалента в C# (обработка ошибок, позднее связывание и т. д.). Спросите себя, почему стоит вручную преобразовать их, когда вы можете перейти на VB.NET, который их поддерживает.

И если вы мне не верите (а за мой ответ никто не голосовал, рыдать рыдать!) возможно, вы поверите Франческо Балена и Дэн Эпплман (в книге Переход на VB.NET), которые согласны со мной.

person MarkJ    schedule 13.10.2008

В GreatMigrations мы делаем это вручную — мы используем свои руки для разработки компилятора VB6/COM. Компилятор считывает VBP (или группу связанных VBP) и библиотеки COM, на которые ссылаются, и строит «семантическую модель». Эта модель представляет собой чрезвычайно подробный набор таблиц символов и потоков кодов операций, которые полностью и точно описывают все информационные структуры, определенные и операции, выполняемые исходной системой.

Затем инструмент применяет ряд алгоритмов, которые изменяют и реструктурируют модель, чтобы сделать ее более совместимой с .NET, и при необходимости применяет пользовательские преобразования; например, чтобы заменить компоненты COM классами .NET. Правила трансформации разрабатываются людьми и создаются «вручную» для удовлетворения их уникальных требований.

Наконец, модель «выполняется», но вместо выделения модели данных и выполнения операций мы создаем файловые структуры, модель данных и операции в нотации целевой платформы. Используя этот подход, мы можем создавать как VB.NET, так и C#. Мы также используем этот процесс для переноса сайтов ASP на ASPX (у нас также есть многодиалектный продукт FORTRAN-to-C).

Этот подход не позволяет создавать готовое к производству программное обеспечение с первой попытки, но его можно улучшить и заставить производить «лучшее» программное обеспечение, изменив конфигурацию инструмента и повторно запустив процесс перевода. Преимущество нашего инструмента заключается в его воспроизводимости, скорости и гибкости, что облегчает гибкую методологию перезаписи с помощью инструмента. ИМО, команды миграции, которые используют наш подход, выиграют от выделения гораздо большего количества ресурсов для оценки альтернатив для редизайна и улучшения процесса разработки, а не для повторного сбора функциональных требований, ручного кодирования и тестирования. В конечном итоге они получат более удобную в сопровождении систему и гораздо более точное воспроизведение исходной функциональности приложения после миграции, а также больший контроль и прозрачность во время миграции.

Пробная версия нашего инструмента доступна здесь запрос на загрузку следа gmStudio. Это позволит вам экспериментировать с кодами ASP/VB до 10 000 LOC и запускать до 30 сеансов.

person mark    schedule 24.09.2009
comment
Предложенная пробная версия довольно бесполезна, и нелегко понять, предлагает ли этот продукт что-либо ценное для невежественных преобразователей VB6... - person Morten Bergfall; 20.02.2012