'程序集使用xxx,它具有更高的版本' vs'无法加载文件或程序集'

时间:2015-04-24 15:13:09

标签: c# .net .net-assembly

我有一个.NET应用程序,它有很多引用。其中许多引用都有自己的依赖项。

换句话说,应用程序A依赖于应用程序B,而应用程序C依次引用程序集DE还依赖于C

所以,如果我想使用不同版本的.csproj。我只是在A的{​​{1}}中引用了不同的版本。我显然得到了Could not load file or assembly... The located assembly's manifest definition does not match the assembly reference的运行时异常。我可以使用BindingRedirect轻松解决该问题。

但是,如果我尝试使用不同版本的E,我会收到编译错误,指出'Assembly uses xxx which has a higher version of yyy。并且运行时指令bindingRedirect无法解决编译错误。

两个' B'和' D'是强名称的程序集。它们的构建方式之间没有明显的差异。

为什么在一种情况下我收到运行时异常(由bindingRedirect解决)而在另一种情况下会出现编译错误?

1 个答案:

答案 0 :(得分:-1)

我使用测试项目进行了一些实验,并找到了问题的原因。

最初的问题是项目A依赖于:

B using C
D using E

我能够更新(降级)C并仍然使用版本A,而我无法对E执行相同操作。

我在尝试构建项目时遇到错误Assembly uses E which has a higher version of yyy

事实证明,如果无法使用特定版本的D构建E,则会发生错误,例如,其中一个接口发生了更改。