VSIX bindingRedirect无法用于System.Data.Common

时间:2018-06-19 21:18:56

标签: c# .net vsix

我正在编写一个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.configMyExtension.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,但无济于事,我的想法还有零。怎么了?

1 个答案:

答案 0 :(得分:0)

最重要的是:.NET Framework程序集中的隐式程序集引用强制覆盖对同一程序集的所有其他引用。 bindingRedirect中的app.config个条目无效。显然,Visual Studio不会自动加载.NET 4.6.1程序集,也不会将其放在其应用程序域搜索路径中,因此它们必须随VSIX(使用的确切版本)一起提供。