关于asp.net:使用特定的.NET版本进行编译是否有任何好处?

Does compiling with a specific .NET version provides any benefits?

我的.NET程序集用于在.NET 2.0、3.5、4.0、4.5上运行的各种项目中。 4.5.1、4.5.2、4.6.1、4.6.2。

我的.NET程序集不使用.NET 2.0附带的任何功能。

我应该使用哪个.NET版本编译.NET程序集?看起来只有两个版本才有意义:.NET 2.0和.NET 4.0。使用任何其他.NET版本进行编译的剂量都有好处吗?


区分.NET Framework版本和Common Language Runtime

版本可能是一个好主意

公共语言运行时

Common Language Runtime(CLR)是负责在目标计算机上运行独立于平台的IL代码的组件。您需要针对需要支持的所有CLR版本编译应用。

在撰写本文时,有以下CLR版本:

  • 4.0
  • 2.0
  • 1.1
  • 1.0

.NET Framework

.NET框架版本基本上是组成.NET的系统程序集的版本。每个.NET版本都旨在与CLR的特定版本配合使用,但是多个.NET Framework版本使用同一版本的CLR。例如.NET 4.0、4.5和4.6使用CLR 4.0。

您可以在此处查看.NET Framework的版本以及它们使用的CLR版本:https://msdn.microsoft.com/zh-cn/library/bb822049(v = vs.110).aspx <铅>

如果您已经针对目标相同的CLR版本的较旧.NET版本进行了构建,则无需针对较新版本的框架重新构建库。所引用的所有系统程序集都应该通过以下其中一种方式升级,以确保向后兼容:

  • "安全"就地升级,其行为与以前的版本相同,除非代码明确选择采用新行为(例如,通过调用新方法,实例化新类等)。

  • 添加新的程序集。因为.NET Framework使用版本号作为名称绑定的一部分,所以即使AppDomain中的其他库引用的是相同名称的较新版本,您仍将获得针对其编译的版本。

请注意,相反的方法不起作用。即使CLR版本相同,也永远不能假设您的类库将比针对.NET的旧版本更有效。


这很难确定,因为这里有些事情在起作用。 .NET 2.0当然比新版本小很多,也没有那么复杂。随着框架的变大和改进,理论上也变得越来越复杂,速度也越来越慢,但是事实并非如此。随着新版本的.NET带来许多性能改进。较旧的版本可能较小,但是较新的版本可能实现的方式有所不同,因此在应用程序运行时它将使用较少的系统资源。

获得可靠答案的唯一方法是对其进行测试。使用2.0编译应用程序,然后尝试将其转换为您喜欢的任何较新版本。运行一些基准测试,看看哪个性能更好,这将为您提供明确的答案。

当我看到您来自何处时出现此问题。更大,更复杂意味着使用它需要更多的系统资源,这是有道理的,但是扩展并不是.NET新版本唯一的扩展。随着计算机体系结构的变化,框架也随之变化。举例来说,.NET 2.0在多核CPU存在之前就发布了,然后.NET 3.0添加了对此的支持。当您使用较新的框架时,与使用旧框架

相比,该代码在具有多核CPU的计算机上将运行得更好。


一些关键因素关系到哪个.NET版本适合编译您的应用程序(不按顺序):

1)性能

2)目标平台(x86或x64)

3)可用的程序集/库/程序包

4)迁移/向后兼容等。

如果您更关注性能和资源使用情况,请查看以下内容:

http://www.codeproject.com/Articles/92812/Benchmark-start-up-and-system-performance-for-Net(包括.NET 1.1-4.0)

http://www.hanselman.com/blog/BenchmarkingNETCode.aspx(基准测试不同.NET目标平台的指南)

根据应用程序的大小和所使用的程序集,较高的版本通常不会给性能带来什么好处(仅几毫秒即可提高)。但是,如果您想保持与旧系统的向后兼容性,则应考虑使用最低合格版本(即.NET 2.0)。

当然,不同的计算机会发出不同的基准测试结果。已知的最佳做法是"坚持使用内置的版本",具体取决于用户的需求。

如果要基于特定于平台的目标进行重大更改,则像SVN / CVS / Git / TFS之类的版本控制会被视为帮助。


基本上,您需要在某个时候评估更新的好处,而不是某些客户可能无法使用新版本的不利之处。例如,如果WPF对您的应用程序有意义,那么在某个时候,您必须停止支持老客户。顺便说一句,由于XP已过时,并且可以在较新的OS上安装其他版本,因此在许多情况下,最好仅更新您的要求。


如果您的库在.Net 2.0应用程序中使用,则无法定位到较新版本的Framework。

"其他应用程序不再能够使用您的媒体库"并不能真正提高性能。


如果您的目标版本比您所需的版本高,并且可以运行,请保持原样。至于针对2.0或4.0的好处,如果它再次起作用,那真的很重要吗。我无法想象通过降级目标框架将获得任何性能改进


这是一个复杂的问题。首先,官方公告指出,当然也有性能提升。多数情况下这是正确的,尽管我怀疑它总是正确的,尤其是在涉及极其复杂的项目时。

我只建议不要将项目"转换"为与开始版本不同的版本。 .Net不仅改变了库,还改变了很多项目的结构。而且我非常怀疑任何转换器都能否从性能的angular成功转换项目。

在升级时,我的座右铭是"不要触摸任何能正常工作的东西"。


使用最新版本进行编译始终是一件好事
1.作为开发人员,您可以使用引入的较新功能。
2.对框架进行的任何优化(例如"配置文件优化")均可用于您的应用程序。

2.0到3.5是就地升级。 4.0到4.5到4.5.1到4.5.2到4.6.1也是。这意味着,如果您安装4.6.1,它将替换4.X系列中的任何较早版本。

唯一要针对特定?显绨姹窘斜嘁氲氖奔涫牵绻诿挥凶钚掳姹镜募扑慊喜渴鸫搿@纾魑⑷嗽保赡苷谑褂肰isual Studio 2015 Update 2,该版本随4.6.1一起提供,但您的服务器仍为4.0。但是这样做,您将无法使用4.0之后引入的较新功能,例如async / await等。


编译其他次要版本不会有性能差异。例如,如果您不使用版本4.5中添加的任何功能,则没有理由仅出于使用更新版本的目的而编译到该版本。