.NET程序集依赖性版本回退

时间:2014-05-23 15:35:42

标签: c# .net dependencies assemblies

所以我有一个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,如果可能,尽可能尝试使用最新版本。但是我在一些限制下工作:

  1. library.dll是一个现有的程序集,此时无法更改。

  2. main.exe(可以更改)设计有硬依赖项,Assembly.LoadWithPartialName()或类似的东西将是一个禁止的设计更改。

  3. 最理想的是,我正在寻找一种沿着程序集重定向的机制,但我还没有找到一种方法来为这种情况正确地配置配置。

    鉴于我们针对库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>
    

0 个答案:

没有答案