Обновление с .NET 1.1 до .NET 2.0, чего ожидать? - PullRequest
8 голосов
/ 11 сентября 2008

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

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

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

Ответы [ 13 ]

8 голосов
/ 15 сентября 2008

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

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

5 голосов
/ 12 сентября 2008

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

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

Документ Word о критических изменениях в .NET Framework 2.0

2 голосов
/ 12 сентября 2008

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

2 голосов
/ 11 сентября 2008

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

2 голосов
/ 11 сентября 2008

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

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

1 голос
/ 05 октября 2008

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

Следите за интернационализированными файлами RESX.

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

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

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

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

1 голос
/ 16 сентября 2008

То, как мы работали с электронной почтой, должно было измениться. В версии 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 = "From@us.com"
       ' 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 голос
/ 15 сентября 2008

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

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

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

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

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

1 голос
/ 12 сентября 2008

.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.

1 голос
/ 11 сентября 2008

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

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

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

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

...