如何使应用程序与.NET 4.0和.NET 4.5兼容

时间:2014-08-28 10:12:52

标签: c# .net upgrade compatibility

我是.NET和C#的新手。

我最近承担了将我的应用程序从.NET 4.0升级到.NET 4.5的任务,以跟上我团队中的其他产品。

我希望能够在.NET 4和.NET 4.5上运行我的应用程序(它有几个项目,一些基于ASP .NET的Web项目和一些独立的应用程序项目(控制台应用程序))。

通过更改目标运行时,在线按照<supportedRuntime> Element从.NET 4.0升级到.NET 4.5的说明后,我意识到compilation元素的targetFramework属性现在是{{ 1}}。我知道这意味着代码肯定适用于.NET framework 4.5。

如果我有一组等待4.5升级但仍在运行.NET 4.0的节点,该怎么办?我很确定我的更改会破坏应用程序。

所以我做了一些研究,在网上提到一些文档后,我从解决方案中项目的4.5文件中的sku元素中删除了supportedRuntime属性。虽然*.config元素的version属性仍然是supportedRuntime(CLR版本)。我希望这能使应用程序在.NET framework 4.0和4.5上运行。

但除了我从ASP .NET configuration guidelines读到的内容之外,我对v4.0元素及其意义并不是很了解。离开compilation会确保我的应用程序在.NET 4.0和.NET 4.5上运行吗?

如何确保我的更改与.NET 4.0和.NET 4.5兼容?

[为什么不将它保留为.NET 4.0,直到节点的.NET框架升级为止?]

您可能想知道为什么我现在不能将其保留为.NET 4.0。 目的是升级到.NET 4.5。但独立脚本在一组不支持.NET 4.5的Windows Server 2003上运行的节点上运行。我已经让我的系统管理团队为.NET进程分配了另一个节点。所以暂时我无法真正完全升级现有代码。直到我在.NET 4.5上测试现有代码并将部署配置到这些新节点之后。 感谢来自@hvd的评论,它在我困惑的大脑中点亮了一个灯泡。现在我知道如何继续。

2 个答案:

答案 0 :(得分:10)

.NET Framework的版本控制不同于运行时的版本控制(CLR和抖动)。在以前的版本中已经是这种情况,.NET 2.0,3.0,3.5和3.5SP1使用了运行时版本v2.0.50727。

对于4.0分支,版本4.0,4.0.1,4.0.2,4.0.3,4.5,4.5.1和4.5.2大致相同都使用相同的运行时版本,v4.0.30319

&#34; sku&#34;添加了属性以便为CLR提供额外的检查,以确保计算机上存在正确的框架版本。和权力this feature,非常可取。没有它,您的4.5目标项目将在仅安装4.0的计算机上正常启动。但是,由于缺少类型或方法,通常会导致非常丑陋的运行时异常。特别是4.5中的变化相当有影响,类型从一个组件移动到另一个组件,以使框架的占用空间在便携式设备上更小。 This question是一个很好的例子,诊断起来非常难看。

之前出现问题的一个很好的例子是EventWaitHandle.WaitOne(int)重载。在.NET 2.0SP2(又名3.5)中添加。一个好主意,没有人知道如何正确使用WaitOne(int,bool)过载。但是,mscorlib的[AssemblyVersion]没有相应的变化,这是一个突破性的变化。由于引发了可怕的问题,程序员使用了重载,但是当它运行在旧版本的.NET上时,程序失败了。带有MissingMethodException的Kaboom,几乎不知道如何找到一个简单而常见的方法。

冷酷的事实是,如果你在项目中定位4.5并删除sku,那么你将会处理这种痛苦。你目标4.0来保持兼容性,当然这很简单。

答案 1 :(得分:2)

事实上,如果您在项目属性中将框架版本更改为 4.0 ,您将确保 4.5 程序集成员(名称空间,类,接口......)在设计时/开发时间内不可见。如果您尝试使用版本 4.5 的成员,编译器将会哭。

这可能是确保您不会使用以前的.NET Framework版本中不存在的新成员的最佳方法。