所以我有一个GUI应用程序(C#.NET 4.0),我们称之为main.exe。它依赖于类库,我们将其称为library.dll(C#.NET 3.5),其中包含多个版本(我们将说1.1.0.0,1.2.0.0和1.3.0.0)。 library.dll的一个(或多个)版本将安装在目标环境的GAC中。所有涉及的集合都有很强的名称。
我的目标是让main.exe使用任何版本的library.dll,如果可能,尽可能尝试使用最新版本。但是我在一些限制下工作:
library.dll是一个现有的程序集,此时无法更改。
main.exe(可以更改)设计有硬依赖项,Assembly.LoadWithPartialName()或类似的东西将是一个禁止的设计更改。
最理想的是,我正在寻找一种沿着程序集重定向的机制,但我还没有找到一种方法来为这种情况正确地配置配置。
鉴于我们针对库1.1.0.0进行构建,如果这些重定向设置中的任何一个都有效,那将会很好,但是他们没有。
<?xml version ="1.0"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<!--
intent here is to provide a range of possible installed assemblies
but .NET does not allow ranges in newVersion
-->
<assemblyIdentity name="library" publicKeyToken="..." culture="neutral"/>
<bindingRedirect oldVersion="1.1.0.0" newVersion="1.1.0.0-1.3.0.0"/>
</dependentAssembly>
<dependentAssembly>
<!--
intent here is to provide a fallback list of possible installed assemblies
but .NET ignore all but the first bindingRedirect
-->
<assemblyIdentity name="library" publicKeyToken="..." culture="neutral"/>
<bindingRedirect oldVersion="1.3.0.0" newVersion="1.1.0.0"/>
<bindingRedirect oldVersion="1.2.0.0" newVersion="1.1.0.0"/>
<bindingRedirect oldVersion="1.1.0.0" newVersion="1.1.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>