C# VSIX bindingRedirect不适用于System.Data.Common

C# VSIX bindingRedirect不适用于System.Data.Common,c#,.net,vsix,C#,.net,Vsix,我正在编写一个Visual Studio 2017扩展,它引用了几个助手库以及Oracle数据客户端。我最初使用Fody和Costura将依赖项编织到我的程序集中,但如果可以避免的话,我宁愿不这样做(首先,它会大幅增加构建时间)。我试图简单地使用vsixmanifest文件中的资产让它工作,但现在我遇到了一个非常令人沮丧的程序集加载错误 每当我尝试实际调用数据库时,我都会收到一个FileNotFoundException,消息是“无法加载文件或程序集”System.Data.Common,Ver

我正在编写一个Visual Studio 2017扩展,它引用了几个助手库以及Oracle数据客户端。我最初使用Fody和Costura将依赖项编织到我的程序集中,但如果可以避免的话,我宁愿不这样做(首先,它会大幅增加构建时间)。我试图简单地使用
vsixmanifest
文件中的资产让它工作,但现在我遇到了一个非常令人沮丧的程序集加载错误

每当我尝试实际调用数据库时,我都会收到一个
FileNotFoundException
,消息是
“无法加载文件或程序集”System.Data.Common,Version=4.2.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。系统找不到指定的文件。“
源于我的数据层,
MyExtension.DataAccess
。我已经对整个解决方案进行了全文搜索,没有任何内容引用此版本的
System.Data.Common
。我甚至在GAC或NuGet上都找不到这个版本

我已经尝试使用
MyExtension.DataAccess
MyExtension.VSIX
中的
app.config
文件重定向到
System.Data.Common
版本,我正在作为一项资产进行捆绑(NuGet的4.3.0,根据IL Spy,它似乎是程序集版本4.1.1.0):



我还尝试在
newVersion
中使用
4.3.0.0
,但也没有成功。我对此束手无策。我已经尝试了我能想到的一切;我甚至找不到其他人在GitHub或堆栈溢出上有这个问题。我删除了所有的扩展数据,我删除了
bin
/
obj
好几次都没有用,我没有更多的想法。出了什么问题?

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

好的,看起来它会自动添加对System.Data.Common程序集版本4.2.0.0的引用,因为我在一些代码中使用了该名称空间。为什么选择4.2.0.0?这甚至不是与框架一起安装的版本。它不存在于“程序集”浏览器中。bindingRedirect不会将其重定向到其他版本。我很困惑这整件事应该如何工作。打开输出vsix(如zip文件),检查1)是否有System.Data.Common,如果是2)检查版本。如果它不在那里或者版本不正常,您需要添加它作为项目的引用,这样它就可以正确地在这个vsix中结束;存在System.Data.Common,但版本错误。它是NuGet软件包4.3.0版本中的4.1.1.0。
DataAccess
程序集引用了4.2.0.0,因此它引发了一个异常。看起来我实际上是在
DataAccess
程序集的输出文件夹中获得了4.2.0.0版本,因此我将尝试将其包含在VSIX中。我不确定这个版本是从哪里来的,因为我运行的系统范围的搜索没有产生任何与4.2.0.0匹配的版本;似乎它使用的是安装框架的任何地方的汇编版本,而不是我明确引用的任何版本。App.config重定向绑定无效。从项目中删除所有无关的引用、清理和重建使其将正确的版本复制到库的输出文件夹中,然后将其复制到VSIX项目中并作为资源包含。它似乎起作用了。
<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>