从.NET 1.1升级到.NET 2.0,会有哪些变化?

8
我正在处理一个大型的.NET 1.1项目,并希望进行升级,主要是为了能够使用更好的工具,如Visual Studio 2008,同时也是因为.NET 2.0框架中有更多新功能和较少的错误。
该项目主要由VB.NET组成,但也包含一些C#部分。它是一个Windows窗体应用程序,使用各种第三方控件。通过使用.NET remoting,丰富的客户端与与MSSQL 2000数据库进行交互的服务器进程对话。
如果我们决定执行升级,我们可能会遇到什么问题?
13个回答

7
自.Net 2.0起,线程模型有所改变,未处理的线程异常将导致整个应用程序终止。我在更新一个频繁崩溃的多线程应用程序时遇到了这个问题。显然,.Net 2.0模型更加健壮,因为您应该在任何情况下都能捕获这些异常,但这是我在迁移过程中遇到的唯一真正的问题。
本文详细介绍了这个问题:http://odetocode.com/blogs/scott/archive/2005/12/14/2618.aspx

5
我们正在考虑进行与Tobi相同的迁移。首先,您可以通过复制项目(或其中一部分)并通过.NET 2.0编译器进行“干运行”来了解预期的情况。我的经验是,2.0编译器会对1.1编译器允许滑过的不良编程实践发出更多警告。编译器将警告您有关隐式转换,“模糊”的返回路径(函数未返回值的代码路径)以及其他一些小问题。
以下是几个可能有用的链接: .NET Framework兼容性 .NET Framework 2.0中的重大更改Word文档

2

其实没什么影响。在编译过程中可能会出现一些关于过时方法的警告,但这些问题通常很容易解决。

建议您追求更高,选择3.5版本。这里的水非常棒!


2

请看这份关于将.NET 2.0应用程序升级到3.5的白皮书。我认为从1.1到2.0的变化更为重要,但是升级过程应该类似。


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

1

RESX文件升级问题

注意国际化的RESX文件。

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

国际化工具

一些可能已经使用/编写的用于大规模国际化的工具可能不再起作用,因为它们可能已经使用了编号资源(Multi Lang和Infragistics)。

Infragistics Winforms控件修改了.NET 1.1中的InitializeForm()并使用资源编号系统访问资源。当迁移到.NET 2.0时,Infragistics资源的编号将失败,因为resx文件被重新生成。您需要升级Infragistics库。


1

你可能会看到的大部分编译警告是因为使用 app.config 存储程序设置。1.1 配置类已被 System.Configuration.ConfigurationManager 废弃。

其他警告可能来自编译器,例如未初始化的变量(在变量声明中将它们设置为 "= nothing" 或 "= null;" 可以消除警告),以及未使用的变量(编译器确定它们可以安全删除)。


1

大部分的代码都应该能够编译通过,只是会有一些关于过时内容的警告。

但是,对于 Visual Studio 生成的代码,你需要注意几件事情。

如果你在 Visual Studio 2003 中生成了强类型数据集,那么在较新版本的 Visual Studio 中编辑它们是无法实现的。你必须重新构建它们或更好地用像 nHibernate 这样的东西来替换它们,以获得最终的 OR 映射器幸福感。

对于旧表单,设计师应该仍然适用。不过,由于 2005 年和 2008 年使用了部分类,可能会引起一些混淆。因此,如果你创建新的表单,代码看起来会与旧的不同。

我从未升级过 ASP.Net 应用程序,所以我不知道 Web 表单的情况,但我猜它应该与 WinForms 的情况类似。大多数情况下应该能够工作,但是可能会遇到一些奇怪的设计问题。


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


1

事情可能会编译通过,但我们在年初升级的一个应用程序中遇到了一些严重的运行时问题。

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

此外,2.0异步Web服务使用笨拙的基于事件的机制,而不是IAsyncResult模式,如果您正在批处理请求,则非常麻烦。

最后,我们有一些遗留代码,使用Microsoft.mshtml.dll托管嵌入式浏览器。升级到2.0会导致应用程序悄悄地切换到更新版本的该dll,这与JavaScript交互相关的某些行为发生了变化。这最后一个问题有点晦涩,但表明迁移到新的运行时可能会对您可能具有的任何COM交互产生影响。

希望这可以帮助到您!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接