Лучшие инструменты разработки для обновления с VB6.0

Я планирую обновить большое приложение vb6 до .net. В проекте используются многие сторонние компоненты, например VSFlexGrid, а также отчеты о кристаллах. Он также использует старые DLL VB6, исходный код которых недоступен. Мои вопросы

  • Должен ли я конвертировать исходный код в С# или достаточно VB.net? Что мне делать с сторонними компонентами, которые не поддерживаются или которые используют небезопасные/устаревшие технологии?

Я бы приветствовал любой полезный вклад от любого, кто сделал это раньше.

Ответ 1

Ниже приведена адаптация моих ответов к подобным вопросам.

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

... и здесь сообщение в блоге Microsofty, в котором соглашается со мной:

Многие компании, с которыми я работал в первые дни работы .NET, сначала смотрели на переписывание, отчасти обусловленное сильным желанием улучшить базовую архитектуру и структуры кода одновременно с переходом на .NET. К сожалению, многие из этих проектов столкнулись с трудностями, и некоторые из них никогда не были завершены. Проблема, которую они пытались решить, была слишком большой

Эта отличная Microsoft страница рекомендует использовать два сторонних средства миграции, лучше (доступно) встроенный мастер обновления VB.NET - Artinsoft и CodeArchitects VBMigration. Я считаю, что они поддерживают некоторую поддержку сторонних элементов управления и DLL - Artinsoft suport эти. Стоит обратиться к ним со списком ваших зависимостей. У VBMigration есть бесплатный инструмент, который будет перечислять зависимости только по этой причине. Также стоит обратиться к оригинальным поставщикам в надежде на эквивалент .NET.

На странице Microsoft также говорится:

Выполнение полного переписывания в .NET намного более дорогостоящее и сложное для достижения наилучшего результата [чем конвертирование]... мы бы рекомендовали этот подход только для небольшого числа ситуаций.

Есть много разработчиков С#, чем разработчики VB.NET в Stack Overflow, поэтому вы, вероятно, получите несколько ответов, рекомендующих С#. Также исторически Microsoft, как правило, поддерживала С# с большим энтузиазмом с точки зрения примеров кода для новых частей .NET и так далее. Но теперь Microsoft делает уверяет, что:

Оба [С# и VB.NET] являются первоклассными языками программирования, которые основаны на Microsoft.NET Framework, и они одинаково мощны.

Итак, это личное решение, хотите ли вы выбрать С# или VB.NET. Инструмент Artinsoft утверждает, что он может конвертировать VB6 в С#.


EDIT: я просто нашел другое предложение - NewCode - через объявление на веб-сайте программирования!

Мое мнение - это то, что сайт не так подробно, как два моих конкурента, о которых я писал выше. Это может быть несправедливо. Какой-то парень из Microsoft Ireland blogged о них - я думаю, что они основаны в Ирландии. Очевидно, инструмент преобразует ваш VB6 в DSL, а затем в VB.NET Winforms, С#, WPF, Java...

Ответ 2

Обновление; даже если существуют механические инструменты, это вряд ли поможет вам. Это не сделает его магически хорошо подходящим для .NET, или сделает очень достойное использование структуры. Я всегда предпочитаю переписывать в этом сценарии, но у этого есть связанные риски/затраты. Например, некоторые мои коллеги в настоящее время переписывают некоторый код VB6/ASP/COM +/xslt для использования ASP.NET MVC - большая часть "интересного" кода на самом деле является бизнес-логикой, которая не является массово сложной для переноса ( трюк проверяет его; -p). Это помогает отображать наш код VB6, что позволяет нам переносить отдельные фрагменты без необходимости одновременного нажатия всей партии.

Сторонние элементы управления будут неприятными, и похоже, что другие DLL могут быть обращены в обратном порядке. Не тривиально.

Выбор между С# и VB.NET в основном вторичен. У обоих есть некоторые незначительные преимущества, но в целом вы можете делать большинство вещей. Если вам нужен COM-взаимодействие, тогда VB.NET может быть полезным (либо для всего, либо для конкретной сборки), но С# 4.0 (в VS2010) подключит этот пробел с помощью нового ввода dynamic и изменений без изменения PIA, В целом, я значительно предпочитаю С#, но это должно быть локальным решением.

Ответ 3

Я говорю об этом вопросе здесь

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

Что касается проблемы между С# и VB.NET. Между этими двумя языками функционально мало различий. Один из моих проектов конверсии еще в 90-х годах - это приложение моей компании CAD/CAM с базового диалекта, известного как Rocky Mountain BASIC, в Visual Basic 3. У нас было несколько фальстарта до этого, и нам стало известно, а потом доказано, что это намного легче сохранить поведение, переключившись на другой базовый семейный язык, чем преобразовать в совершенно другое семейство языков, такое как C.

Поймите, что в нашем случае у нас много математических подпрограмм, и математика - одна из немногих областей, которые сохраняют относительность, совместимую с семейством языков BASIC. Поэтому мой опыт не будет на 100% применимым к вашему делу.

По моему мнению, кратковременность языков стиля С - это вред для долговременной ремонтопригодности (десятилетия). Однако, чтобы быть справедливым, это в лучшем случае незначительный момент. У меня есть большой опыт работы на обоих языках, когда я пишу и поддерживаю моделирование космической капсулы Меркурия и Джемини, написанной на С++, с некоторыми утилитами, написанными на С#, в дополнение к программе CAD/CAM в VB6/VB.NET для моей компании.

Сейчас наше преобразование в формате .NET сосредоточено на VB.NET. Я нашел автоматические инструменты почти бесполезными, поскольку мы являемся тяжелой графической программой. К счастью, мы не используем прямые вызовы VB Graphics, а помещаем все за интерфейс холста. Для совместимости с печатью мы используем библиотеку совместимости принтеров с VB Power Pack в качестве отправной точки.

У нас есть инструмент, с помощью которого мы запускаем наш код, который преобразует все целые числа для ввода Int16 и всех длин, чтобы ввести Int32 плюс несколько других обычно сделанных преобразований. Затем мы помещаем преобразованный класс или подпрограмму в нашу библиотеку .NET и выполняем модульные тесты. Результаты сравниваются с теми же тестами, что и в исходном коде VB6.

Самой большой болью в прикладе были формы. Простой диалог в порядке, но для более сложных форм нам просто нужно переопределить. Опять же, наши формы лежат за интерфейсами в нашем исходном коде, так что, пока мы работаем, нам просто понятно, что делать.

Ответ 4

Я бы предложил вам "частично переписать" ваше приложение. Причудливое название этого подхода задушено (http://martinfowler.com/bliki/StranglerApplication.html).

Я предполагаю, что это приложение базы данных. Посмотрите, можете ли вы переписать некоторые функции, напрямую разговаривая с БД. Не беспокойтесь о том, чтобы пользователи использовали два приложения. Старое приложение достаточно плохо для них, чтобы попросить обновление.

Мое другое предположение состоит в том, что, поскольку это VB6, у него нет очень хорошего разделения интерфейса/бизнес-логики. Вот почему автоматическая модернизация не заставит вас слишком многого.

Возможно, я ошибался в вашей ситуации. Вы должны спросить, сколько вы действительно можете выйти из существующего кода. Купите/прочитайте книгу кода Legacy Legacy Legacy.

Ответ 5

Я начал перерабатывать одно из своих приложений, написанное на VB6 на VB.NET. Оба С# и VB.NET полагаются на платформу .NET, и различия между приложением, скомпилированным в одном, ничтожно. Выберите язык, который вы и другие, работающие над проектом, почувствовали себя более комфортно. Одно преимущество использования VB.NET(хотя я не решаюсь назвать его таким), вы можете использовать функцию "Обновить Visual Basic 6 Code" в Visual Studio. Есть некоторые вещи, которые исправляет конвертер, и многого нет. Если вы хотите попробовать это, вам придется очистить свой код VB6:

  • Все массивы должны быть основаны на нулевом уровне
  • Избегайте использования строк фиксированной длины, если это вообще возможно. Этот код нужно будет изменить, чтобы использовать Char массивы в vb.net
  • Явно объявить все переменные. Используйте Option Explicit, если вы еще не
  • Избегайте вариантов, таких как чума, если вы не должны использовать их для вызова API
  • Укажите ByRef или ByVal при передаче параметров, не полагайтесь на поведение по умолчанию для этого
  • Всегда указывайте, какое свойство вы меняете, свойства по умолчанию не существуют в vb.net. Например, "txtName = strName" становится "txtName.Text = strName"
  • Более подробный список этих различий можно найти здесь

Даже после очистки существующего кода лучше всего, конверсия по-прежнему не равна 100%. Вы можете попробовать это в отдельном проекте, чтобы увидеть, что вы получаете, чтобы дать вам идеи о том, как нужно перерабатывать вещи. Иногда формы выглядят уродливыми после конверсии, и для некоторых вещей вы вполне можете в конечном итоге переделать их с нуля в любом случае.

Многие наши формы сильно использовали свойство ItemData в списках со списком и списках, которые больше не существуют в .NET. ListViews также работают по-разному, и ни одна из функций чертежа не меняется. Некоторые формы из приложения, которое я конвертировал, выглядели очень плохо, когда преобразовывались в элементы управления .NET и не вели себя одинаково, поэтому я просто собираюсь в конечном итоге переработать их с нуля. Преимущество заключается в том, что я получаю переработку процессов, которые были не очень эффективными для начала, но, конечно, это занимает намного больше времени. Поделитесь этим тем фактом, что я все еще изучаю, что делают библиотеки .NET. Да, это займет некоторое время.

Ответ 6

Как было указано, вы можете переписать ваше приложение.

Другим решением будет настоящая альтернатива VB6, полностью совместимая. Я работаю в проекте, который хочет быть настоящим VB 7: RAD Basic. Вы можете продолжить работу с вашей кодовой базой VB6 в современной среде.

Ответ 7

Вам не понравится мой ответ, но здесь идет.

a) Нанять кого-то со значительным опытом в создании крупных приложений .Net, чтобы прийти и руководить проектом и научить вас.

b) Извлеките бизнес-требования из вашего текущего приложения и заморозите их.

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

P.S. На данный момент я бы не стал беспокоиться о Winforms. Я бы прыгнул прямо в WPF, вы поблагодарите меня позже.

P.P.S Язык действительно не имеет значения (С# или VB.Net). Усилия будут одинаковыми.

Ответ 8

Вопрос заключается в явном запросе информации о "Лучших инструментах разработки для обновления с VB6.0" для большого сложного обновления VB6/COM и второго о С# или VB.NET.

Идеальный инструмент "конверсии" поможет вам выполнить две критические задачи каждого обновления.

  • Сохраняющая функциональность
  • Использование .NET в некотором смысле который следует вашим желаемым стандартам кодирования и платформы.

Роль инструментов в сохранении функциональности

Большие, зрелые устаревшие системы могут содержать тысячи файлов кода и миллионы строк кода. Усилия, необходимые для полного описания и проверки функциональности, воплощенной в этом большом количестве кода, являются массовыми. На самом деле, может быть так много функциональной работы, что некоторые технически настроенные команды не видят ее сначала. Они тратят большую часть своего времени на беспокойство о том, как использовать последние возможности .NET, язык и инфраструктуру, прежде чем полностью оценить, насколько сложно будет сохранить и проверить устаревшие функции. Это похоже на то, что они ловят рыбу из огромного функционального кита, беспокоясь о том, чтобы поймать небольшую техническую рыбу.

Команды, которые пытаются воспроизвести гору кода, прочитав, интерпретируя и перекодируя его вручную, могут ослепнуть в процессе... Поэтому критическая особенность любого инструмента преобразования - помочь команде читать, интерпретировать и переписывать свой код переписывая его в форме, которая сохраняет свою семантику. Ученые-компьютерщики изучили проблему чтения интерпретаций и перезаписи исходного кода на протяжении более 60 лет, и решение, которое они придумали, называется компилятором. Эффективный код "конвертер" работает как компилятор.

VB6 - это язык высокого уровня: компилятор Microsoft VB6 и его среда выполнения неявно выполняли множество действий: управление выводами типов, неявные преобразования, неявные по ref, поздние вызовы, обработка нулей, обработка ошибок в стиле goto, создание форм и т.д. Преобразователь VB6 должен также иметь возможность распознавать и хранить множество небольших деталей, явно не указанных в коде, и он должен иметь возможность правильно выражать эти детали в .NET. Инструмент преобразования промышленной силы будет иметь мощную расширяемую систему метаязыков VB6, которая позволяет пользователю контролировать, как код VB6 распознается и интерпретируется.

VB6 также легко расширяется через COM. Существует много сотен различных API-интерфейсов COM, и это не учитывает все внутренние компоненты, которые обычно входят в состав корпоративных систем. Конвертер должен иметь возможность распознавать любой COM-класс или элемент управления, используемый VB6, как в дизайне пользовательского интерфейса, так и в коде, и выражать его, используя какой-либо другой соответствующий .NET API или interop. Один из инструментов, о котором я знаю, может даже генерировать структуру кода .NET из информации об использовании COM в VB6. Инструмент преобразования промышленной силы будет иметь мощную систему COM-типа, которая является расширяемой и позволяет пользователю управлять заменой COM в сгенерированном коде.

Роль инструментов в использовании .NET

VB6 и .NET во многих отношениях различны, а также различные API, поддерживающие две платформы. Таким образом, с инструментами или без, почти всегда потребуется какой-то перепроектированный дизайн. Кроме того, каждая команда привносит в свой проект различные предпочтения, ограничения и требования: спросите 10 программ, как закодировать что-то, и вы получите как минимум 10 различных ответов. Конвертер должен помочь команде выразить свои уникальные предпочтения, ограничения и требования. Это включает в себя предоставление повторяющихся, самодокументирующих средств модификации кода VB6 перед его обработкой, модификацию кода .NET после его создания, интеграцию рукописного кода, описание пользовательских замен API, направление пользовательской реструктуризации кода и выполнение многих других динамических и проектных -специфические преобразования по мере необходимости.

Объединяя все это

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

Еще один комментарий к инструментам конверсии. Самый важный "инструмент", который вы будете использовать в обновлении .NET, - ваш мозг. Вы должны изучать языки .NET, шаблоны проектирования и фреймворки и применять то, что вы знаете при обновлении. Лучший автоматизированный инструмент не решает для вас, как переписать код: он помогает вам повторно реализовать устаревшую функциональность в соответствии с дизайном, который вы решаете, имеет смысл.

Microsoft предлагает несколько инструментов в этой статье. VB6 Обновить партнерские инструменты

VB.NET или С#

Когда я спрашиваю сообщество .NET(т.е. поиск в Интернете) для информации, инструментов, идей, кода и помощи при проблемах с программированием, я с большей вероятностью найду ответы, выраженные на С#, чем в VB.NET. Я также считаю, что компилятор С# лучше подходит для перепрограммирования с помощью инструмента, поскольку он требует, чтобы сгенерированный код был более внутренне согласованным и явно описанным. Получение и хранение сборки - это несколько грубый, но абсолютно критический тест качества кода и ключевая веха в любых усилиях по обновлению. Помните, что VB.NET - это не VB6. Это звучит очевидно, но его трудно помнить, потому что оба языка выглядят одинаково. Это сходство может обманывать; поэтому ИМО лучше пойти на С#, где вам напоминают, что правила разные. Наконец, С# всегда был и продолжает разрабатываться для .NET; VB.NET не может этого сказать.

Отказ от ответственности: я работаю для Великих Миграций. Гораздо больше обсуждать. Пожалуйста, посетите Портал документации по большим миграциям для получения дополнительных статей и получения пробной версии gmStudio и попробуйте инструмент для повышения прочности в промышленности для себя.