NuGet 恢复覆盖签名的 DLL

NuGet restore overwiting signed DLLs

我们应用程序的入口点程序集使用强名称密钥签名,因此 .NET 也要求对所有引用的程序集进行签名。对于那些发布未签名程序集的包,我们的解决方法是使用 ildasm/ilasm 手动签署它们,过程解释为 here,并将强名称程序集签入到 git 存储库。

在构建机器上,我们 git pull 获得签名的 DLL,然后 .nuget\NuGet.exe restore App.sln 恢复其余的包。 NuGet 恢复没有覆盖 packages 文件夹下的 signed/checked-in 程序集文件,因此我们可以很好地构建解决方案。

直到最近我才注意到这不再有效,并且仅对于其中一个已签名的 DLL nuget restore 会用软件包附带的原始未签名程序集覆盖它。我不明白为什么现在它的工作方式不同以及为什么它只发生在其中一个包中。

NuGet.exe 版本为 3.4.3.

谢谢!

查看最新的 NuGet source 在我看来好像对包目录中任何丢失的 .nupkg 文件进行了初步检查,我假设您没有使用 project.json文件,然后它会尝试仅还原那些找不到 .nupkg 文件的 NuGet 包。然而,这只是我阅读代码,理想情况下我需要调试它以查看它是否真的有效。

要解决此问题,您可以查看使用 StrongNamer NuGet package,它将在构建时强烈命名所有程序集,因此恢复将不再是问题。