我有一个.NET应用程序,它有很多引用。其中许多引用都有自己的依赖项。
换句话说,应用程序A
依赖于应用程序B
,而应用程序C
依次引用程序集D
。 E
还依赖于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
解决)而在另一种情况下会出现编译错误?
答案 0 :(得分:-1)
我使用测试项目进行了一些实验,并找到了问题的原因。
最初的问题是项目A依赖于:
B using C
D using E
我能够更新(降级)C
并仍然使用版本A
,而我无法对E
执行相同操作。
我在尝试构建项目时遇到错误Assembly uses E which has a higher version of yyy
。
事实证明,如果无法使用特定版本的D
构建E
,则会发生错误,例如,其中一个接口发生了更改。