从.NET 1.1升级到.NET 2.0,会有什么期望?

时间:2020-03-05 18:51:45  来源:igfitidea点击:

我正在开发一个大型的.NET 1.1项目,并且希望对此进行升级,主要是为了能够使用更好的工具(例如Visual Studio 2008),而且由于.NET中的新功能和少量错误2.0框架。

该项目包含VB.NET的较大部分,但C#中也有部分。它是一个Windows Forms应用程序,使用了各种第三方控件。使用.NET远程富客户端与与MSSQL 2000数据库接口的服务器进程进行通信。

如果我们决定执行升级,我们可以期待什么样的问题?

解决方案

回答

真的没什么。我们会在编译中发现一些有关过时方法的警告,但这些警告通常很难解决。

你应该拍大些然后去3.5. 这里的水很好。

回答

尽管我们可能会收到一些过时的方法警告,但我们可能不会遇到任何重大问题。编译器通常应该告诉我们什么是替代品。我知道某些System.Configuration事物已更新。

回答

我们将看到的大多数编译警告是,如果我们使用app.config存储程序设置。系统配置不推荐使用1.1配置类。

我们可能会看到来自编译器的其他警告将针对未初始化的变量(在变量声明中将其设置为" = none"或者" = null;",以使其消失)和未使用的变量(编译器确保它们已被删除)。安全删除)。

回答

看一下有关将.NET 2.0应用程序升级到3.5的白皮书。我认为从1.1到2.0的更改更为重要,但是过程应该相似。

回答

大部分代码仍应编译,除了一些有关已过时的警告。

但是,关于Visual Studio生成的代码,我们需要注意以下几点。

如果我们已经在Visual Studio 2003中生成了强类型的数据集,则可以忘记在较新版本的Visual Studio中进行编辑。我们必须重建它们或者更好地将它们替换为nHibernate之类的东西,以获得最终的OR-mapper-bliss

表单的设计者仍应使用旧表单。我们可能会感到有些困惑,因为2005和2008在这里使用了部分类。因此,如果我们创建新表单,则代码看起来与旧表单不同。
我从未升级过ASP.Net应用程序,所以我不了解Web表单,但我想它的作用与Winforms相同。通常它会起作用,但是会引起一些设计师的怪异。

回答

我们正在考虑现在Tobi进行相同的迁移。首先,通过复制项目(或者项目的一部分)并通过.NET 2.0编译器对其进行"空运行",我们可以很好地了解预期的结果。我的经验是,2.0编译器会给出有关1.1编译器会下滑的不良编程习惯的更多警告。编译器将警告我们有关隐式强制转换,"歧义"返回路径(函数不返回值的代码路径)以及其他一些小事情。

以下一些链接可能会有所帮助:
.NET Framework兼容性

.NET Framework 2.0中重大更改的Word文档

回答

除了上面提到的应用程序配置之外,如果我们使用任何XSD验证,则还需要替换一些代码来加载和验证XML。

回答

.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升级非常相似。

回答

.Net 2.0及更高版本中的theading模型有所更改,其中线程中未处理的异常将导致整个应用程序终止。更新一个执行了很多线程并偶尔崩溃的应用程序时,我遇到了这个问题。显然,.Net 2.0模型更强大,因为无论如何我们肯定都应该抓住这些问题,但这是我进行迁移时遇到的唯一真正的问题。

本文讨论了所有内容:
http://odetocode.com/blogs/scott/archive/2005/12/14/2618.aspx

回答

事情可能会编译正常,但今年初我们升级的应用程序遇到了一些讨厌的运行时问题。

首先,当从2.0应用程序调用1.1 Web服务时,DateTime对象中的时区处理存在许多问题,因为在序列化到线路上时往返于UTC的转换在框架版本之间似乎工作方式不同。

另外,2.0异步Web服务使用基于klutzy事件的机制而不是IAsyncResult模式,如果要批量处理请求,这将是一大麻烦。

最后,我们有一些旧代码,使用Microsoft.mshtml.dll托管了嵌入式浏览器。升级到2.0会使应用程序无提示地切换到该dll的较新版本,该dll的某些行为已与javascript交互有关。最后一个情况有些晦涩,但表明迁移到较新的运行时可能会对我们可能进行的任何COM交互产生影响。

希望这可以帮助!

回答

我们处理电子邮件的方式必须改变。 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)

回答

当心国际化的RESX文件。

当我们在.net 2.0中重新打开.net 1.1表单时,RESX文件将升级到新版本。在.net 1.1中,外语.resx文件仅包含更改。在.net 2.0中,默认.resx文件中的所有字段现在都移到了外语resx文件中。 (例如.fr.resx)。如果我们已经国际化,则必须查看所有外语resx文件。

我们可能曾经/自己编写来进行国际化的某些工具可能不再起作用,因为它们可能已经使用了编号的资源。 (多语言和基础知识)

Infragistics Winforms控件修改.net 1.1中的InitializeForm()并使用资源编号系统访问资源。迁移到.net 2.0时,随着重新生成resx文件,Infragistics资源的编号将失败。我们将需要升级Infragistics库。