我正在使用第三方程序集,不幸的是我现在需要将他们的最新版本和以前的版本加载到我的项目中,以便在运行时我可以决定加载哪个。我只需要一个,不需要两个。
考虑到这一点,我还依赖于组件提供的类型,因此我无法每次都从反射加载并查询我想要使用的方法/事件/接口(interface)。我看到有人提到通过 AppDomain
s 处理这个问题,但我不确定如何继续。
该过程是否是针对组件的一个版本进行编码,然后在运行时(使用 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/