强烈命名第三方程序集后出现构建错误。

Build Error after third party assembly was strongly named.

我一直在努力升级我的应用程序以使用 MongoDB 2.0 驱动程序,但遇到了障碍,因为 MongoDB 目前没有发布程序集的强命名版本。因此,我无法在我的解决方案中构建一个在全局程序集缓存 (GAC) 中注册的程序集,因为 GAC 要求程序集被强命名。

使用 Ian Picknell's and Ryan Farley's 博客中解释的技术,我能够为程序集命名; MongoDB.Bson.dll, MongoDB.Driver.dllMongoDB.Driver.Core.dll。在对它们进行强签名后,我删除了对这些程序集的旧引用并添加了对新的强命名版本的引用。当我尝试在 VS2013 中构建项目时,会生成 2 个错误(见下文),这两个错误都试图引用弱命名程序集(这是我的理解,因为错误状态为 PublicKeyToken=null)。

由于 MongoDB 是开源的,所以我也尝试过直接从源代码构建强命名程序集,但它已经产生了数百个我仍在努力解决的错误。

Error   1   The type 'MongoDB.Bson.BsonDocument' is defined in an assembly that is not referenced. You must add a reference to assembly 'MongoDB.Bson, Version=2.0.1.27, Culture=neutral, PublicKeyToken=null'.

Error   2   The type 'MongoDB.Driver.IAsyncCursorSource`1<T0>' is defined in an assembly that is not referenced. You must add a reference to assembly 'MongoDB.Driver.Core, Version=2.0.1.27, Culture=neutral, PublicKeyToken=null'.

阅读主题 331520 和 Dirk Vollmar 的回答(也给他点赞)。他提供的 link 解释了我遇到的问题。

问题的快速总结是原始 MongoDB.Driver.dll 和 MongoDB.Driver.Core.dll 是使用 MongoDB.Bson 的未签名版本的引用构建的,因此我不得不更新其中的引用这些 DLL 包含我用来签署程序集的 publickeytoken。所有内容都在 Foo、Bar、Baz 部分下的 .NET-fu 文章中进行了解释。

我安装了 nuget 包 StrongNamer 并且它自动签署了未签名的依赖项。

Strong Namer will automatically add strong names to referenced assemblies which do not already have a strong name. This will allow you to reference and use NuGet packages with assemblies which are not strong named from your projects that do use a strong name.