c# - 加载同一程序集的多个版本

标签 c# assemblies appdomain multiple-versions

我正在使用第三方程序集,不幸的是我现在需要将他们的最新版本和以前的版本加载到我的项目中,以便在运行时我可以决定加载哪个。我只需要一个,不需要两个。

考虑到这一点,我还依赖于组件提供的类型,因此我无法每次都从反射加载并查询我想要使用的方法/事件/接口(interface)。我看到有人提到通过 AppDomains 处理这个问题,但我不确定如何继续。

该过程是否是针对组件的一个版本进行编码,然后在运行时(使用 AppDomain)交换我想要使用的正确 DLL?所以我只会在启动时处理这个?

最佳答案

如果两个程序集兼容,您可以在 app.exe.config 或 web.config 文件中通过声明 bindingRedirect 来定义始终使用新版本。

例子

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" appliesTo="v1.0.3705">
        <dependentAssembly>
            <assemblyIdentity name="Regcode" publicKeyToken="b03f5f7f11d50a3a" culture=""/>
            <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="1.0.3300.0"/>
        </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

dotnet 1.0 的这个配置条目告诉汇编加载器始终使用版本 1.0.3300.0,无论调用 exe 中编译了什么。对于较新的 dotnet 版本也是可能的

关于c# - 加载同一程序集的多个版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4451220/

相关文章:

c# - 如何动态地将 OrderBy() 添加到 LINQ 查询

c# - 如何从特定程序集引用命名空间?

asp.net - 如何引用 GAC 中的程序集

加载程序集时未找到 VB.NET 方法

c# - AppDomain.CreateInstanceFromAndUnwrap - 无法转换透明代理

c# - 从字节数组加载时找不到 AppDomain 程序集

c# - 由于 AppDomain 在项目之间交叉时,通过 Resharper 8 测试运行 NUnit 失败

c# - HoloLens 2获取空间坐标系的正确方法

c# - 在 SP2010 中添加事件

c# - C#/.NET 是否有长度单位的内置转换例程?