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

Eak*_*nan 2 .net c# compatibility upgrade

我是.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属性现在是4.5.我知道这意味着代码肯定适用于.NET framework 4.5.

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

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

compilation除了我从ASP .NET配置指南中读到的内容之外,我对该元素及其重要性并不是很了解.是否会targetFramework确保我的应用程序在.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的评论,它在我困惑的大脑中点亮了一个灯泡.现在我知道如何继续.

Han*_*ant 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

添加了"sku"属性以向CLR提供额外检查,以确保计算机上存在正确的框架版本.并且提供此功能非常理想.没有它,您的4.5目标项目将在仅安装4.0的计算机上正常启动.但是,由于缺少类型或方法,通常会导致非常丑陋的运行时异常.特别是4.5中的变化相当有影响,类型从一个组件移动到另一个组件,以使框架的占用空间在便携式设备上更小. 这个问题是一个很好的例子,诊断起来非常难看.

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

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