【问题标题】:What is the meaning of Referenced Assembly's Version? Why 4.0.0.0?引用程序集的版本是什么意思?为什么是 4.0.0.0?
【发布时间】:2017-09-11 21:05:15
【问题描述】:

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

您可以在 dotPeek 中看到它们

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

这是否意味着 .NET CLR 在内存中加载应用程序将忽略那些版本号 (4.0.0.0) 但会“推送最新的可用版本”? D

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

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

【问题讨论】:

    标签: .net msbuild clr


    【解决方案1】:

    将程序集版本号(不是文件版本号)粘贴到 CLR 版本(.NET Framework 1.x/2.0/4.0),有时是框架版本(3.5),这更像是 Microsoft 的惯例。一个好处是,通过阅读该版本号,您可以立即知道您是否添加了正确的参考。

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

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

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

    【讨论】:

    • 谢谢。这是否意味着将 NET40 和 NET45 编译的程序集添加到同一个 NUGET 包是没有意义的?例如 NLog 4 包含 40 和 45(它还包含 35、mono10、sl4、sl5、wp8、xamarin.iOS10 - 但我明白了)。
    • 对于许多库(比如我维护的库),不需要同时提供 net40 和 net45 二进制文件。但是,.NET Framework 4.5 确实具有可能影响库的特殊功能,github.com/NLog/NLog/… 所以我并不感到惊讶。
    猜你喜欢
    • 1970-01-01
    • 2022-11-08
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 2014-09-14
    • 1970-01-01
    相关资源
    最近更新 更多