我正在编写一个Visual Studio 2017扩展,其中引用了多个帮助程序库以及Oracle数据客户端。我最初使用Fody和Costura将依赖项编织到我的程序集中,但是如果我可以避免的话,我宁愿不这样做(因为这样做会极大地增加构建时间)。我正在尝试使用vsixmanifest
文件中的Assets使其正常工作,但是现在遇到了非常令人沮丧的程序集加载错误。
每当我尝试实际调用数据库时,都会收到FileNotFoundException
,其中包含消息'Could not load file or assembly 'System.Data.Common, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.'
,该消息来自我的数据层MyExtension.DataAccess
。我已经对整个解决方案进行了全文搜索,并且 没什么 引用了此版本的System.Data.Common
。我什至在GAC或NuGet中都找不到该版本。
我尝试使用app.config
和MyExtension.DataAccess
中的MyExtension.VSIX
文件重定向到我作为资产捆绑在一起的System.Data.Common
的版本(4.3.0从NuGet(根据IL Spy看来是程序集版本4.1.1.0)
<dependentAssembly>
<assemblyIdentity name="System.Data.Common" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.1.1.0" />
</dependentAssembly>
我也曾尝试在4.3.0.0
中使用newVersion
,但这也不起作用。我的智慧到此为止。我已经尽力想了一切;我什至在GitHub或Stack Overflow上找不到其他遇到此问题的人。我已经删除了所有扩展数据,已经多次删除了bin
/ obj
,但无济于事,我的想法还有零。怎么了?
答案 0 :(得分:0)
最重要的是:.NET Framework程序集中的隐式程序集引用强制覆盖对同一程序集的所有其他引用。 bindingRedirect
中的app.config
个条目无效。显然,Visual Studio不会自动加载.NET 4.6.1程序集,也不会将其放在其应用程序域搜索路径中,因此它们必须随VSIX(使用的确切版本)一起提供。