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

时间:2015-07-23 17:06:21

标签: c# dll mongodb-.net-driver gac

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

使用Ian Picknell'sRyan Farley's博客上解释的技术,我能够强烈命名这些程序集; MongoDB.Bson.dll, MongoDB.Driver.dllMongoDB.Driver.Core.dll。强烈签名后,我删除了对这些程序集的旧引用,并添加了对新的强名称版本的引用。当我尝试在VS2013中构建项目时,会生成两个错误(见下文),这两个错误都试图引用弱命名的程序集(这是我的理解,因为错误表明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'.

2 个答案:

答案 0 :(得分:3)

我安装了nuget包StrongNamer,它自动签署了无符号依赖项。

  

Strong Namer会自动为引用添加强名称   尚未具有强名称的程序集。这将允许   您可以引用和使用NuGet包,而不是   以您的项目命名的强项,使用强名称。

答案 1 :(得分:0)

阅读主题331520和Dirk Vollmar的回答(同时给他一个upvote)。他提供的链接解释了我遇到的问题。

问题的快速摘要是原始MongoDB.Driver.dll和MongoDB.Driver.Core.dll是使用对无符号版MongoDB.Bson的引用构建的,所以我不得不更新这些DLL内部的引用包括我用于签署程序集的publickeytoken。所有内容都由Foo,Bar,Baz部分下的.NET-fu文章解释。