Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使应用程序与.NET 4.0和.NET 4.5兼容_C#_.net_Upgrade_Compatibility - Fatal编程技术网

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

C# 如何使应用程序与.NET 4.0和.NET 4.5兼容,c#,.net,upgrade,compatibility,C#,.net,Upgrade,Compatibility,我对.NET和C#还很陌生 我最近承担了将我的应用程序从.NET 4.0升级到.NET 4.5的任务,以跟上团队中的其他产品 我希望能够在.NET4和.NET4.5上运行我的应用程序(它有几个项目,一些基于ASP.NET的web项目和一些独立的应用程序项目(控制台应用程序)) 在遵循有关通过更改目标运行时从.NET 4.0升级到.NET 4.5的联机说明后,我意识到编译元素的targetFramework属性现在是4.5。我理解这意味着该代码一定会在.NETFramework4.5上运行 如果我

我对.NET和C#还很陌生

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

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

在遵循有关通过更改目标运行时从.NET 4.0升级到.NET 4.5的联机说明后,我意识到
编译
元素的
targetFramework
属性现在是
4.5
。我理解这意味着该代码一定会在.NETFramework4.5上运行

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

所以我做了一些研究,在参考了一些在线文档之后,我从解决方案中项目的
*.config
文件中的
supportedRuntime
元素中删除了
sku
属性。尽管
supportedRuntime
元素的
version
属性仍然是
v4.0
(CLR版本)。我希望这能使应用程序同时在.NETFramework4.0和4.5上运行

但是,除了我从中读到的内容之外,我对
编译
元素及其意义知之甚少。离开
targetFramework
是否可以确保我的应用程序同时在.NET 4.0和.NET 4.5上工作

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

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

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

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


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

对.NET Framework的版本控制不同于运行时的版本控制(CLR和jitter)。在以前的版本中,.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中的更改非常有影响,类型从一个程序集移动到另一个程序集,使框架在便携式设备上的占地面积更小。这是一个很好的例子,诊断起来很难看

过载就是一个很好的例子。在.NET2.0SP2(又名3.5)中添加。一个好主意,没有人知道如何正确使用WaitOne(int,bool)重载。但在mscorlib的[AssemblyVersion]中没有相应更改的突破性更改。造成了可怕的问题,程序员们兴致勃勃地使用了重载,但当它在旧版本的.NET上运行时,他们的程序失败了。Kaboom中有一个MissingMethodException,几乎不知道一个简单而常用的方法是如何丢失的


冷酷的事实是,如果您在项目中以4.5为目标,并删除sku,那么您将能够处理这种痛苦。您必须以4.0为目标来保持兼容性,这当然非常简单。

我可能遗漏了一些东西,但您为什么不将应用程序保持为.NET 4.0呢?这应该已经在拥有.NET4.5.0的系统上运行了。谢谢@hvd,这非常有意义。现在我如何结束这个问题。