注意:迁移到.NET 4.0会有问题<转>
日前,微软发布了一个列表,其中完整描述了从.NET Framework 3.5 SP1 迁移到.NET 4.0会出现的问题。该列表包含了六个方面的变化:核心、ASP.NET、 ADO.NET、WCF, WPF以及XML。
如果你是在同一台计算机上安装了.NET Framework 4.0,那么在.NET3.5下编译的.NET应用程序运行时不会有任何问题,因为这两个框架是并行安装,彼此不会产生影响。但是,如果你在.NET4.0下对应用程序重新进行了编译,那么就会出问题,因为最新的微软运行时在做出改善的同时也引入了一些破坏性的改变。
这些改变表现在六个方面:
该列表相对较长,所以在此只会列出其中的一部分,如下:
核心
应用程序配置文件名称的改变 | “如果你的应用程序配置文件名是application-name.config,那么需要将其重命名为application-name.exe.config。例如,你需要将MyApp.config重命名为MyApp.exe.config。” |
关闭了代码访问策略。 | 参见代码访问安全策略的兼容性和迁移。 |
ASP.NET
由于CAS策略的改变,在全局缓存中运行受信代码的应用程序可能会失败。 | 参见ASP.NET 4应用程序中的代码访问安全。 |
在安装了.NET 4.0之后,安装在IIS 6.0上的ASP.NET 2.0程序可能会出现错误。 | 要解决这个问题,你需要禁用ASP.NET 4.0,或者将ASP.NET 2.0的应用移动到未安装ASP.NET 4的IIS实例中。 |
ASP.NET 4.0中的页面解析器更加严格。 | 你将必须修正由无效标签所产生的错误。 |
数据
流 | WCF数据服务不会再为读写操作关闭底层的数据流。 |
事件 | 现在,(TEntity的) System.Data.Linq.EntitySet 除了会在载入的时候引发事件之外,如果(TEntity的) EntitySet 被卸载,那么在执行增加和删除操作的时候还会引发ListChanged事件。 |
查询 | 在LINQ to SQL 查询中,Skip(0)不会再被忽略。从而导致拥有这个方法的查询的行为会有所不同。例如,在某些情况下,需要使用带有Skip(0)的OrderBy子句,现在,如果没有包含OrderBy子句,那么查询就会抛出NotSupportedException异常。 |
WCF
配置文件 | WCF支持配置文件之间的合并。 |
服务托管 |
你将再无法通过在属性定义上添加allowDefinition='MachineToApplication'来在服务级别指定<serviceHostingEnvironment>配置选项。在服务级别指定<serviceHostingEnvironment>元素在技术上是错误的,并且会导致不一致的行为。 |
WPF
异常处理 | “为了能够更早地侦测到错误,WPF会抛出TargetInvocationException并且对重要的异常——如NullReferenceException、 OutOfMemoryException、 StackOverflowException和SecurityException——设定InnerException属性,而不会捕获最原始的异常” |
窗口样式 | “如果你试图将WindowStyle设置为一个值而不是None,而此时AllowsTransparency的值为true且WindowState的值是Minimized,那么就会抛出InvalidOperationException异常”; |
对话框 | “为了提高可靠性,CommonDialog.ShowDialog方法会在创建Microsoft.Win32.FileDialog控件的同一线程中调用”; |
XML
命名空间解析器 | “XmlReader.ReadContentAs方法不会再忽略传递给它的IXmlNamespaceResolver 解析器”; |
空格 | “为了防止在你创建reader时数据的丢失,XmlReader.Create方法不再会删除重要的空格”; |
查看英文原文:The Complete List of Migration Issues Upgrading to .NET 4.0