我一直在努力升级我的应用程序以使用MongoDB 2.0驱动程序,但由于MongoDB目前尚未发布强烈命名的程序集版本,因此遇到了障碍。因此,我无法在我的解决方案中构建一个在全局程序集缓存(GAC)中注册的程序集,因为GAC要求程序集具有强名称。
使用Ian Picknell's和Ryan Farley's博客上解释的技术,我能够强烈命名这些程序集; MongoDB.Bson.dll,
MongoDB.Driver.dll
和MongoDB.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'.
答案 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文章解释。