引用 dll 时忽略内部版本号

2024-01-30

我有一个 .NET 4.0 项目(C#)的解决方案,它生成一个延迟签名的 dll,我对其进行点模糊处理和签名。

EDIT:这就是我对 dll 进行版本控制的方式:

[assembly: AssemblyVersion("0.7.0.*")]
[assembly: AssemblyFileVersion("0.7.0.0")]

我有另一个使用 .NET 4.0 项目(C++/CLI)的解决方案,该解决方案引用签名的 dll 并生成签名的 dll(实际上,在构建后延迟签名和签名,因为C++ 构建系统中的缺陷 https://connect.microsoft.com/VisualStudio/feedback/details/464524/mt-error-810100b3).

问题是对 dll 的引用包含特定的版本号,其中甚至包括内部版本号(我想要一个内部版本号)。

每次构建引用的 dll 时,我都必须更改项目设置文件 (.vcxproj),以便它引用新版本的 dll。由于我使用源代码管理,这非常不方便(不同的计算机可能有不同的内部版本号,因为每台计算机都会构建自己的引用的 dll - 引用的 dll 不在源代码管理中)。

如果我不更改引用,我会收到警告:

警告 MSB3245:无法解析 这个参考。无法找到 集会...

还有很多这样的错误:

错误 C3083:“Foo”:符号 '::' 的左边必须是类型

一旦我更改参考,这些问题就会得到解决。

如何使引用忽略内部版本号甚至整个版本号?


C# IDE 有一个选项,“Specific Version = False”。在 C++/CLI IDE 中不可用。坦率地说,这并不是一个真正的问题。您可能错误地使用了 [AssemblyVersion] 属性。该版本与程序集中公开可见的类相关联。如果您对这些类的公共成员进行任何更改,则可能会发生重大更改,从而导致依赖于这些类的代码失败。

At 那一点您是否应该更改 [AssemblyVersion]。任何使用该程序集的项目都必须更新其参考程序集,并且必须重新编译。

其他非破坏性更改(例如错误修复或不可见类中的调整)会生成一个新文件,该文件与使用它的任何项目完全兼容。您应该更新 [AssemblyFileVersion] 编号。在 C++/CLI 项目中,需要更新非托管版本资源。可以自动更改相应的 .rc 文件,或者您可以使用 #define。

请注意 2.0 版中的 .NET 基本程序集的行为方式相同。在 3.0、3.5 和 3.5 SP1 版本中,他们的 [AssemblyVersion] 一直保持在 2.0.0.0。他们的文件版本从 2.0.50727.42 开始。并且在过去 5 年里多次增加,达到 2.0.50727.4927,或多或少。

根据记录,您链接到的 VS2010 bug 并不是一个 bug。以前从来没有成功过,失败是无声无息的。这是 C++ 构建系统中的一个缺陷,mt.exe 嵌入了清单after大会名称强。并破坏进程中的强名称,因为这会更改文件哈希。 VS2010实际上是一个改进,它会发出警告,而不是默默地让一个破碎的强名称通过。您不必延迟签名,只需在构建后事件中使用 -Ra 辞职即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

引用 dll 时忽略内部版本号 的相关文章

随机推荐