该项目主要由VB.NET组成,但也包含一些C#部分。它是一个Windows窗体应用程序,使用各种第三方控件。通过使用.NET remoting,丰富的客户端与与MSSQL 2000数据库进行交互的服务器进程对话。
如果我们决定执行升级,我们可能会遇到什么问题?
其实没什么影响。在编译过程中可能会出现一些关于过时方法的警告,但这些问题通常很容易解决。
建议您追求更高,选择3.5版本。这里的水非常棒!
注意国际化的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库。
你可能会看到的大部分编译警告是因为使用 app.config 存储程序设置。1.1 配置类已被 System.Configuration.ConfigurationManager 废弃。
其他警告可能来自编译器,例如未初始化的变量(在变量声明中将它们设置为 "= nothing" 或 "= null;" 可以消除警告),以及未使用的变量(编译器确定它们可以安全删除)。
大部分的代码都应该能够编译通过,只是会有一些关于过时内容的警告。
但是,对于 Visual Studio 生成的代码,你需要注意几件事情。
如果你在 Visual Studio 2003 中生成了强类型数据集,那么在较新版本的 Visual Studio 中编辑它们是无法实现的。你必须重新构建它们或更好地用像 nHibernate 这样的东西来替换它们,以获得最终的 OR 映射器幸福感。
对于旧表单,设计师应该仍然适用。不过,由于 2005 年和 2008 年使用了部分类,可能会引起一些混淆。因此,如果你创建新的表单,代码看起来会与旧的不同。
我从未升级过 ASP.Net 应用程序,所以我不知道 Web 表单的情况,但我猜它应该与 WinForms 的情况类似。大多数情况下应该能够工作,但是可能会遇到一些奇怪的设计问题。
.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升级非常不相似。
事情可能会编译通过,但我们在年初升级的一个应用程序中遇到了一些严重的运行时问题。
首先,在从2.0应用程序调用1.1 Web服务时,DateTime对象的时区处理存在许多问题,因为在不同的框架版本之间,在序列化到线路时转换为和从UTC的方式似乎有所不同。
此外,2.0异步Web服务使用笨拙的基于事件的机制,而不是IAsyncResult模式,如果您正在批处理请求,则非常麻烦。
最后,我们有一些遗留代码,使用Microsoft.mshtml.dll托管嵌入式浏览器。升级到2.0会导致应用程序悄悄地切换到更新版本的该dll,这与JavaScript交互相关的某些行为发生了变化。这最后一个问题有点晦涩,但表明迁移到新的运行时可能会对您可能具有的任何COM交互产生影响。
希望这可以帮助到您!