我有一个.NET应用程序,它有许多引用。其中许多引用都有自己的依赖项。
换句话说,有一个依赖于应用程序B
的应用程序A
,而应用程序又引用汇编C
。还有一种依赖D
依赖E
。
所以,如果我想使用不同版本的C
.我只是在我的A
.csproj
中引用了那个不同的版本。我显然得到了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
解决)和另一种情况下的编译错误?
我已经使用测试项目进行了一些实验,并找到了问题的原因。
最初的问题是有一个项目A依赖于:
B using C
D using E
我能够更新(降级)C
并且仍然使用构建A
,而我不能对E
做同样的事情。
我在尝试构建项目时遇到错误Assembly uses E which has a higher version of yyy
。
事实证明,当无法使用该特定版本的E
构建D
时,就会发生错误,例如,其中一个接口发生了更改。