gpt4 book ai didi

.net - 引用 dll 时忽略内部版本号

转载 作者:行者123 更新时间:2023-12-04 02:23:30 28 4
gpt4 key购买 nike

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

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

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

我有一个 .NET 4.0 项目 (C++/CLI) 的另一个解决方案,它引用签名的 dll 并生成一个签名的 dll(实际上,由于 a flaw in the C++ build system 而延迟签名并在后期构建中签名)。

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

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

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

warning MSB3245: Could not resolve this reference. Could not locate the assembly...

还有很多这样的错误:

error C3083: 'Foo': the symbol to the left of a '::' must be a type

一旦我更改引用,这些问题就解决了。

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

最佳答案

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

那个时候您应该更改 [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 错误不是错误。只是以前从来没有用过,失败是无声的。这是 C++ 构建系统中的一个缺陷,mt.exe 在程序集强命名后嵌入 list 。并在此过程中破坏强名称,因为这会更改文件哈希。 VS2010 实际上是一个改进,它会对此发出警告,而不是默默地让损坏的强名称通过。您不必延迟签名,只需在构建后事件中使用 -Ra 辞职即可。

关于.net - 引用 dll 时忽略内部版本号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2975773/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com