2008-09-11 3 views
8

Я работаю над большим проектом .NET 1.1, и есть желание обновить его, чтобы использовать лучшие инструменты, такие как Visual Studio 2008, но также из-за новых функций и меньшего количества ошибок в .NET 2.0.Обновление с .NET 1.1 до .NET 2.0, чего ожидать?

Проект состоит из большей части VB.NET, но есть также части в C#. Это приложение Windows Forms, использующее различные сторонние элементы управления. Использование .NET для удаленного взаимодействия с богатым клиентом ведет к серверному процессу, который взаимодействует с базой данных MSSQL 2000.

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

ответ

2

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

Вы должны стрелять большими и идти на 3,5. Здесь вода здесь.

0

У вас, вероятно, не будет , нарушающих вопросов, хотя вы можете получить предупреждения об устаревших методах. Компилятор обычно должен сказать вам, что такое замена. Я знаю, что некоторые из файлов System.Configuration были обновлены.

1

Большинство предупреждений о компиляции вы увидите, если вы используете app.config для сохранения настроек программы. Класс конфигурации 1.1 был устарел для System.Configuration.ConfigurationManager.

Другие предупреждения, которые вы можете видеть, поступающие от компилятора, будут для неинициализированных переменных (установите их в «объявление без изменений» или «= null;» в объявлении переменной, чтобы они ушли) и неиспользуемые переменные (компилятор уверен, что они безопасны для удаления).

2

Посмотрите на это whitepaper по разработке приложения .NET 2.0 на 3.5. Я считаю, что изменения от 1.1 до 2.0 более значительны, но процесс должен быть схожим.

1

Большая часть кода должна компилироваться, за исключением нескольких предупреждений о том, что материал устарел.

Но есть несколько вещей, которые вы должны соблюдать в отношении кода Visual Studio.

Если вы создали сильно типизированные наборы данных в Visual Studio 2003, вы можете забыть об их редактировании в новых версиях visual studio. Вам придется перестроить их или лучше просто заменить их чем-то вроде nHibernate для окончательного OR-mapper-bliss.

Дизайнер форм должен по-прежнему работать со старыми формами. Вы можете получить некоторую путаницу, хотя в 2005 и 2008 годах здесь участвуют частичные классы. Поэтому, если вы создаете новые формы, код выглядит иначе, чем старые. Я никогда не обновлял приложение ASP.Net, поэтому я не знаю о веб-формах, но я думаю, что он будет работать так же, как материал winforms. В основном это сработает, но ожидайте некоторой фантазии дизайнера.

5

Мы смотрим на то же самое перемещение прямо сейчас Тоби. Во-первых, вы можете получить представление о том, чего ожидать, сделав копию своего проекта (или его часть) и дайте ему «сухой ход» через компилятор .NET 2.0. Мой опыт в этом заключался в том, что компилятор 2.0 дает больше предупреждений о плохих методах программирования, которые компилятор 1.1 допускает слайд. Компилятор будет предупреждать вас о неявных переводах, «неоднозначных» обратных путях (путь кода, где функция не возвращает значение) и некоторые другие незначительные вещи.

Вот несколько ссылок, которые могут оказаться полезными: .NET Framework Compatability

Word Document of Breaking changes in .NET Framework 2.0

2

В дополнении к вещам конфигурации приложения, упомянутых выше, если вы используете какие-либо проверки XSD вам необходимо заменить код вокруг загрузки и проверки XML.

1

.NET 1.1 и .NET 2.0-3.5 - это совершенно разные структуры, и, что более важно, .NET 3.5 представляет собой набор дополнительных сборок, которые вы можете добавить в свой проект .NET 2.0 - ни одна из основных сборок не была изменена , насколько мне известно, - и обновленный компилятор, который знает о синтаксическом саке под названием LINQ, методы расширения и т. д.

Другими словами, я не думаю, что обновление .NET 2.0-3.5 очень похоже на обновление .NET 1.1-2.0.

8

Изменения в модели theading в .Net 2.0, где необработанные исключения в потоке приведут к завершению всего приложения. Я столкнулся с этим при обновлении приложения, которое делало много потоков и иногда разбилось. Очевидно, что модель .Net 2.0 более надежна, так как вы, безусловно, должны ее поймать, но это была единственная проблема, с которой я столкнулся при миграции.

Эта статья говорит об этом: http://odetocode.com/blogs/scott/archive/2005/12/14/2618.aspx

1

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

Во-первых, у нас было несколько проблем с обработкой часовых поясов в объектах DateTime при вызове 1.1 веб-сервисов из приложения 2.0, поскольку конверсии в UTC и из UTC, когда сериализация в провод, казалось, работали по-разному между версиями каркаса.

Кроме того, 2.0 async webservices используют механизм событий klutzy вместо шаблона IAsyncResult, который является королевской болью, если вы выполняете пакетные запросы.

Наконец, у нас был некоторый унаследованный код, в котором размещен встроенный браузер с использованием файла Microsoft.mshtml.dll. Обновление до 2.0 заставляло приложение тихо переключаться на более новую версию этой DLL, которая имела некоторые изменения поведения, связанные с взаимодействием javascript. Этот последний является немного неясным случаем, но показывает, что переход к более новой среде выполнения может иметь последствия для любого взаимодействия с COM, которое у вас может быть.

Надеюсь, это поможет!

1

Способ, которым мы писали электронную почту, должен был измениться. Версия 1.1 используется System.Web.Mail с

Imports System.Web.Mail 
    ' 
    Dim message As New MailMessage' this is a web.mail msg, not a net.mail msg 
    Dim objConn As SmtpMail 
    Dim objAttach As MailAttachment 
     ' 
    message .From = "[email protected]" 
     ' more properties assigned to objMail 
    objAttach = New MailAttachment(ExportName) 
    message.Attachments.Add(objAttach) 
     ' Here's where we actually send the thing 
    SmtpMail.SmtpServer.Insert(0, "127.0.0.1") 
    objConn.Send(objMail) 

и новый один имеют System.Net.Mail

  Imports System.Net.Mail 
     ' 
     Dim message as MailMessage ' this is a net.mail msg, not a web.mail msg 
     Dim data As Attachment 
     Dim client As New SmtpClient("127.0.0.1") 
    ' 
     data = New Attachment(ExportName) 
    ' Create the message and add the attachment 
     message = New MailMessage(EmailFrom, EmailTo, reportDescription) 
     message.Attachments.Add(data) 
' Send the message 
     client.Send(message) 
1

RESX файлы обновление проблемы

Следите за многоязычные файлы RESX.

Когда вы снова открываете форму net 1.1 в .net 2.0, файл RESX обновляется до новой версии. В .net 1.1 файл .resx иностранного языка содержал только изменения. В .net 2.0 ВСЕ поля в файле .resx по умолчанию теперь перемещаются в файл resx на иностранном языке. (например, .fr.resx).Если вы уже интернационализировали форму, все внешние резус-файлы должны быть просмотрены.

Интернационализация Инструменты

Некоторые инструменты, которые вы, возможно, использовал/письменные себя сделать интернационализацию собственной массы не может работать больше, поскольку они могут быть использованы пронумерованные ресурсы. (Multi Lang & Infragistics)

Инфракрасные элементы управления Winforms модифицируют InitializeForm() в .net 1.1 и получают доступ к ресурсам с использованием системы нумерации ресурсов. При перенастройке в .net 2.0 нумерация ресурсов Infragistics завершится неудачно по мере восстановления файла resx. Вам нужно будет обновить библиотеки Infragistics.

0

Не должно быть слишком много проблем, так как в теории это обратная совместимость (я отмечаю комментарий MikeeMike о исключениях потоков). После переезда вы будете в порядке, есть немало приятных вещей, таких как дженерики. Хотя вы не хотите переносить все свои коллекции на дженерики одним махом, как только вы это сделаете, ваш код должен быть более надежным из-за уменьшения количества бросков - и, вероятно, быстрее (хотя пробег может варьироваться в этом аспекте) , На данный момент я собираюсь начать преобразование .NET 2 -> .NET 4 из трех моих продуктов. Основным преимуществом будет дальнейшее усовершенствование многопоточной поддержки (параллельные петли foreach и т. Д.).

Смежные вопросы