我编写了一个针对不同框架(4.0和4.5)的同一个程序集。
你可以在dotPeek中看到它们
我原本预计他们应该引用不同的Framework库(mscorlib,System.Core等),但我错了。它们都引用相同的"版本= 4.0.0.0"。
这是否意味着内存中的.NET CLR加载应用程序将忽略这些版本号(4.0.0.0),但是"推送最新的可用版本"? d
CLR(我假设加载器是其中的一部分)也忽略了目标框架信息吗?我的意思是如果CLR加载程序是interpetate版本,它不需要使用目标信息......
或者我的编译过程和msbuild配置有问题?
答案 0 :(得分:1)
将程序集版本号(不是文件版本号)粘贴到CLR版本(.NET Framework 1.x / 2.0 / 4.0)更具有Microsoft惯例,而有时候是Framework版本(3.5)。一个优点是,通过读取该版本号,您可以立即知道是否添加了正确的引用。
您的期望并不奇怪,但这只与文件版本号相关,文件版本号有很大不同(甚至修补程序可以更改它们),如您所愿。 Windows使用它来跟踪补丁级别。
Microsoft决定保持程序集版本号不变(作为就地升级),因此我们也应该习惯这一点。 CLR侧重于程序集版本号,在许多情况下忽略文件版本号。
更新:您应该注意到自.NET Core引入以来,此约定开始有所改变。现在,程序集版本号用于明确指示API表面,并且可以快速更改。