如何在插件场景中实现程序集绑定重定向?

oli*_*oli 5 .net plugins f# assembly-resolution assembly-binding-redirect

我有一个plugin P扩展和application A(.NET40),我无法控制。
P 程序集 (.NET40) 有一个shared dependency D(.NET35)。

P 和 D 都依赖于 FSharp.Core,但版本不同:

P编译针对FSharp.Core, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
D编译针对FSharp.Core, Version=2.3.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

只部署了 FSharp.Core, Version=4.4.0.0 并且我订阅了 AppDomain.AssemblyResolve 来加载部署的程序集。

当我在 GAC 中安装了两个 FSharp.Core 版本的机器上进行测试时,它们最终都加载了插件。

我的理解是绑定重定向将是这里的解决方案,但如何在不访问 app.config 的情况下完成它?

Fun*_*unk 3

您可以将 D 部署为发布者策略程序集。

\n\n

这种方法的好处是客户端目录不需要包含 *.config 文件来重定向到较新的版本。发布者策略允许程序集的发布者将 *.config 文件的二进制版本安装到 GAC(以及程序集)中。这样,CLR 将能够在 GAC 级别执行请求的重定向。

\n\n

如果要绕过某个应用程序的发布者策略,可以使用 元素在 app\xe2\x80\x99s *.config 文件中指定<publisherPolicy>。

\n\n
<?xml version="1.0" encoding="utf-8" ?>\n<configuration> \n    <runtime>\n        <assemblyBinding xmlns=\xe2\x80\x9curn:schemas-microsoft-com:asm.v1\xe2\x80\x9d> \n            <publisherPolicy apply="no" />\n        </assemblyBinding>\n    </runtime> \n</configuration>\n
Run Code Online (Sandbox Code Playgroud)\n

  • 如果不使用GAC就没有办法解决这个问题吗? (3认同)