【问题标题】:Reference different version of same assembly targeted for different Platforms引用针对不同平台的相同程序集的不同版本
【发布时间】:2018-01-18 21:32:34
【问题描述】:

我已经实现了一个由操作系统加载的 .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 中添加一些挂钩代码 在程序集加载之前调用。然后加载正确的程序集 在广汽。 (AppDomain…AssemblyResolve 方法)。我试过这个,但在我的 DLL 加载时没有太多运气来挂钩代码。

【问题讨论】:

  • @HansPassant 感谢您的回复。我目前正在研究绑定重定向的配置方法。你知道这种方法是否可以动态检查并加载目标系统上引用程序集的正确依赖关系吗?

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


【解决方案1】:

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

Issues compiling in Windows 10

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

【讨论】:

    猜你喜欢
    • 2010-09-18
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    相关资源
    最近更新 更多