Referenced Assembly's Version 是什么意思?为什么是 4.0.0.0?

What is the meaning of Referenced Assembly's Version? Why 4.0.0.0?

我针对不同的框架(4.0 和 4.5)编译了同一个程序集。

您可以在 dotPeek 中看到它们

我原以为它们应该引用不同的框架库(mscorlib、System.Core 等),但我错了。他们都引用相同的 "version=4.0.0.0".

这是否意味着内存中的 .NET CLR 加载应用程序将忽略那些版本号 (4.0.0.0) 但会 "push the latest available version"? D

CLR(我假设加载程序是其中的一部分)是否也忽略了目标框架信息?我的意思是如果 CLR 加载器插入版本它不需要使用目标信息...

还是我的编译过程和msbuild configure有问题?

将程序集版本号(而非文件版本号)固定为 CLR 版本(.NET Framework 1.x/2.0/4.0)更像是 Microsoft 的惯例,而有时 Framework 版本 (3.5) .一个好处是,通过阅读那个版本号,您可以立即知道您是否添加了正确的引用。

您的期望并不奇怪,但这仅与文件版本号有关,这与您希望的有很大差异(即使是修补程序也可以更改它们)。 Windows 使用此类来跟踪补丁级别。

微软决定保持程序集版本号不变(作为就地升级),所以我们也应该习惯这一点。 CLR关注程序集版本号,很多情况下忽略文件版本号。

更新:您应该注意到,自引入 .NET Core 以来,此约定开始发生了一些变化。现在程序集版本号用于显式指示API面,可以快速变化。