第三方程序集强命名后出现生成错误
本文关键字:错误 程序集 第三方 | 更新日期: 2023-09-27 18:04:24
我一直在努力升级我的应用程序以使用MongoDB 2.0驱动程序,但由于MongoDB目前没有发布强命名版本的程序集,因此遇到了障碍。因此,我无法在解决方案中构建在全局程序集缓存(GAC)中注册的程序集,因为GAC要求程序集使用强命名。
使用Ian Picknell和Ryan Farley的博客上解释的技术,我能够强烈命名程序集;MongoDB.Bson.dll,
、MongoDB.Driver.dll
和MongoDB.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'.
我安装了nuget包StrongNamer,它会自动对未签名的依赖项进行签名。
Strong Namer将自动添加强名称来引用尚未具有强名称的程序集。这将允许您可以引用和使用NuGet包与程序集,而不是从使用强名称的项目中进行强命名。
阅读主题331520和Dirk Vollmar的回答(也给他点赞)。他提供的链接解释了我遇到的问题。
问题的快速总结是原始的MongoDB. driver .dll和MongoDB. driver . core .dll是在引用未签名版本的MongoDB的情况下构建的。Bson,所以我必须更新这些DLL内部的引用,以包括我用来签署程序集的publickeytoken。所有这些都在. net . fu的文章中进行了解释,该文章位于Foo, Bar, Baz部分。