引用针对不同平台的同一程序集的不同版本

时间:2018-01-18 21:32:34

标签: c# .net dll .net-assembly adfs

我已经实现了一个由.NET加载的.net DLL(在c#中)(基本上它是一个ADFS MFA适配器)。 此DLL引用操作系统中存在的程序集“Microsoft.IdentityServer.Web”。 这适用于Windows Server 2012(ADFS 3.0)。

这在Windows Server 2016(ADFS 4.0)上失败,因为它有一个较新版本的程序集“Microsoft.IdentityServer.Web”(尽管是相同的公钥)。 我该如何处理这种情况?

  • 我首先想到的是构建平台特定版本 我的DLL(每个操作系统Win2012和Win2016一个)参考 适当的装配版本。根据操作系统安装DLL 正在安装。这将有一些构建和安装开销。

有更简单的方法吗?

  • 我可以通过某种方式引用我的程序集中的程序集版本 DLL的配置文件。当我的DLL加载时,它会查找哪个版本 汇编存在于GAC中并加载正确的版本。 (幸运的是,只有依赖程序集的版本 GAC中的“Microsoft.IdentityServer.Web”。
  • 我注意到了一些在我的DLL中添加一些挂钩代码的方法 在Assemblies Load之前调用。然后加载正确的组件 在GAC。 (AppDomain ... AssemblyResolve方法)。我试过这个,但是当我的DLL加载时没有太多运气来挂钩代码。

1 个答案:

答案 0 :(得分:0)

我认为通过动态检查哪些参数存在来解决Windows DLL包装器的类似问题。

Issues compiling in Windows 10

这可能不是一个好的解决方案,但考虑到替代方案是预编译dll并动态交换它,尤其是在使用VCS方面,这可能是一个更好的解决方案。