我的.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版本进行剂量编译可以带来任何好处吗?
答案 0 :(得分:4)
区分.NET Framework
版本与Common Language Runtime
公共语言运行时
Common Language Runtime
(CLR
)是负责在目标计算机上运行与平台无关的IL代码的组件。您需要针对您需要支持的所有CLR
版本编译您的应用程序。
撰写本文时,有以下CLR版本:
.NET Framework
.NET框架版本基本上是构成.NET的系统程序集的版本。每个版本的.NET都旨在针对特定版本的CLR
,但不止一个.NET框架版本使用相同版本的CLR
。例如,.NET 4.0,4.5和4.6使用CLR
4.0。
您可以在此处查看.NET Framework的版本以及它们使用的CLR
版本:https://msdn.microsoft.com/en-us/library/bb822049(v=vs.110).aspx
如果已针对同一CLR
版本的较旧.NET版本构建,则不需要针对较新版本的框架重建库。引用的任何系统程序集都应使用以下方法之一进行升级,以确保向后兼容性:
“安全”到位升级,其行为方式与上一版本相同,除非代码明确选择新行为(例如,通过调用新方法,实例化新类等)。
添加新装配体。因为.NET框架使用版本号作为名称绑定的一部分,所以即使AppDomain中的其他库引用了具有相同名称的较新版本,您仍将获得编译的版本。
请注意,相反的方法不起作用。即使CLR
版本相同,您也永远不能假设您的类库对抗旧版.NET而不是编译版本。
答案 1 :(得分:0)
编译不同的次要版本时没有性能差异。例如,如果您不使用4.5版中添加的任何功能,则没有理由仅为了使用更新版本而编译到该版本。
答案 2 :(得分:0)
使用最新版本进行编译总是很好的becoz 1.作为开发人员,您可以使用引入的新功能 2.对框架进行的任何优化,例如"配置文件优化"适用于您的应用程序。
2.0到3.5是就地升级。所以是4.0到4.5到4.5.1到4.5.2到4.6.1。这意味着如果安装4.6.1,它将替换4.X系列中的任何早期版本。
如果要在没有最新版本的计算机上部署代码,则唯一可以针对特定旧版本进行编译的时间。例如,作为开发人员,您可以使用4.6.1附带的Visual Studio 2015 Update 2,但您的服务器仍然是4.0。但这样做,您将无法使用4.0之后引入的新功能,如async / await等。
答案 3 :(得分:0)
这是一个复杂的问题。首先,官方公告指出,当然还有性能升级。这绝对是正确的,尽管我怀疑它总是如此,特别是涉及极端复杂的项目时。
我只建议不要将项目“转换”为与其开始的版本不同的版本。 .Net很多次改变了项目结构,而不仅仅是库。我非常怀疑任何转换器都能够从性能的角度成功转换项目。
在升级时,“不要触摸任何正常工作的东西”是我的座右铭。
答案 4 :(得分:0)
如果您的目标版本高于您需要的版本并且它可以正常工作,那么请保持原样。至于目标2.0或4.0的好处,如果它有效,它真的很重要。我无法想象你会通过降级你的目标框架来获得任何性能提升
答案 5 :(得分:0)
如果您的库在.Net 2.0应用程序中使用,则无法定位较新版本的Framework。
"其他应用程序无法再使用您的图书馆"并不是真正的绩效改进。
答案 6 :(得分:0)
基本上,您需要在某些时候评估更新的好处与某些客户的缺点可能无法使用新版本。例如,如果WPF对您的应用程序有意义,那么在某些时候,您必须停止支持旧客户。顺便说一句,由于XP已经过时,其他版本可以安装在较新的操作系统上,在很多情况下,最好只更新您的要求。
答案 7 :(得分:0)
.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这样的版本控制会被视为帮助。
答案 8 :(得分:0)
这是一个很难确定的因为这里有一些事情在发挥作用。 .NET 2.0当然比新版本更小,更简单。随着框架越来越大,越来越好,理论上也越来越复杂,但事实并非如此。随着.NET的新版本,许多性能改进。旧版本可能更小,但较新版本可能以不同方式实现,因此在应用程序运行时使用较少的系统资源。
获得可靠答案的唯一方法是测试它。使用2.0编译应用程序,然后尝试将其转换为您喜欢的任何新版本。运行一些基准测试,看看哪一个表现更好,这将给你一个明确的答案。
虽然我知道你在这个问题上的来源。更有意义的是,更大,更复杂意味着使用它需要更多的系统资源,但扩展并不是新版.NET所带来的唯一因素。随着计算机体系结构的改变,框架也做了让我们说例如.NET 2.0在多核CPU存在之前发布,然后.NET 3.0增加了对它的支持。当您使用较新的框架而不是使用旧框架时,代码将在具有多核CPU的计算机上运行得更好