C# 从.NET 1.1升级到.NET 2.0,会有什么期待?

C# 从.NET 1.1升级到.NET 2.0,会有什么期待?,c#,.net,vb.net,winforms,deprecated,C#,.net,Vb.net,Winforms,Deprecated,我正在从事一个大型的.NET1.1项目,有人希望升级它,主要是为了能够使用更好的工具,如VisualStudio2008,但也因为.NET2.0框架中的新功能和更少的bug 该项目由VB.NET的较大部分组成,但也有C#中的部分。它是一个Windows窗体应用程序,使用各种第三方控件。使用.NET远程处理,富客户端与服务器进程对话,该进程与MSSQL 2000数据库接口 如果我们决定执行升级,我们会遇到什么样的问题?没有,真的。在编译时,您会发现一些关于过时方法的警告,但这些警告通常都是微不足道

我正在从事一个大型的.NET1.1项目,有人希望升级它,主要是为了能够使用更好的工具,如VisualStudio2008,但也因为.NET2.0框架中的新功能和更少的bug

该项目由VB.NET的较大部分组成,但也有C#中的部分。它是一个Windows窗体应用程序,使用各种第三方控件。使用.NET远程处理,富客户端与服务器进程对话,该进程与MSSQL 2000数据库接口


如果我们决定执行升级,我们会遇到什么样的问题?

没有,真的。在编译时,您会发现一些关于过时方法的警告,但这些警告通常都是微不足道的


你应该大射门,投3.5分。这里的水很稀

您可能不会遇到任何中断问题,尽管您可能会收到一些不推荐使用的方法警告。编译器通常应该告诉您替换的内容。我知道一些System.Configuration内容已更新。

您将看到的大多数编译警告是使用app.config存储程序设置。System.configuration.ConfigurationManager不推荐使用1.1配置类


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

请看一看将.NET 2.0应用程序升级到3.5的过程。我认为从1.1到2.0的更改更为重要,但过程应该类似。

除了一些关于内容过时的警告外,大多数代码仍应编译

但是,对于VisualStudio生成的代码,您应该注意以下几点

如果您在VisualStudio2003中生成了强类型数据集,那么您可以忘记在较新版本的VisualStudio中编辑它们。你必须重建它们,或者最好用类似nHibernate的东西来代替它们,以获得终极或地图绘制者的幸福

表单设计器仍应使用旧表单。不过,您可能会感到有些困惑,因为2005年和2008年在这里使用了分部类。因此,如果创建新表单,代码看起来与旧表单不同。
我从来没有升级过ASP.Net应用程序,所以我不知道web表单,但我想它的工作原理与winforms一样。大多数情况下,它会起作用,但会有一些设计师的怪异之处。

我们现在正在考虑做同样的迁移,Tobi。首先,您可以通过制作项目(或项目的一部分)的副本并通过.NET2.0编译器对其进行“试运行”,从而很好地了解预期结果。我的经验是,2.0编译器对1.1编译器忽略的糟糕编程实践给出了更多警告。编译器将警告您有关隐式强制转换、“不明确”返回路径(函数不返回值的代码路径)以及其他一些次要事项

以下是一些您可能会觉得有用的链接:


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

.NET 1.1和.NET 2.0-3.5是完全不同的框架,更重要的是,.NET3.5只是一组额外的程序集,您可以添加到.NET2.0项目中-据我所知,没有任何核心程序集实际被更改-以及一个升级的编译器,它了解称为LINQ的语法、扩展方法等


换句话说,我不认为.NET 2.0-3.5的升级与.NET 1.1-2.0的升级非常相似。

在.NET 2.0以后的版本中,如果线程中未处理的异常会导致整个应用程序终止,则会对其进行更改。我在更新一个应用程序时遇到了这个问题,这个应用程序执行了大量线程操作,偶尔会崩溃。显然,.NET2.0模型更加健壮,因为无论如何,您都应该能够捕捉到这些,但这是我在进行迁移时遇到的唯一真正的问题

这篇文章讨论了这一切:

事情可能会顺利编译,但我们在年初升级的应用程序在运行时遇到了一些棘手的问题

首先,当从2.0应用程序调用1.1 webservices时,我们在DateTime对象中的时区处理方面遇到了一些问题,因为序列化到wire时与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 = "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)
RESX文件升级问题 注意国际化的RESX文件

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

国际化工具 一些您自己使用/编写的用于大规模国际化的工具可能不再有效