我有一个使用 MEF 加载插件的应用程序,它工作得很好。所有插件都引用核心库并导出正确的部分,并且应用程序加载这些部分完全没有任何问题。
出现的问题与插件库的各个依赖关系有关。一个例子是 Ionic.Zip 和 Newtonsoft.Json。由于在开发这些外部部件时使用 Nugget,因此不同的插件往往会引用这些库的不同版本。应用程序甚至可以加载自己的应用程序(在 Newtonsoft.Json 的情况下)。
我意识到插件库正在寻找这些库的特定版本,因此在运行某些任务时会抛出错误。
有没有办法在开发过程中指示插件不应绑定(bind)到库的任何特定版本,以便它只使用加载的任何内容?
这样,插件链接到哪个版本的 Newtonsoft.Json 或 Ionic.Zip 并不重要,它只会使用主应用程序已加载的版本。
最佳答案
我相信您正在寻找程序集绑定(bind)重定向。
您可以通过在应用程序的 app.config 中添加条目来为给定程序集创建程序集绑定(bind)重定向。以下示例将对任何版本的 myAssembly 的所有调用重定向到程序集的 v3.0.0.0
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="myAssembly"
publicKeyToken="32ab4ba45e0a69a1"
culture="en-us" />
<!-- Assembly versions can be redirected in app,
publisher policy, or machine configuration files. -->
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
您可以通过此链接找到更多信息 Redirecting Assembly Versions
关于c# - MEF 中的 Dll 版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22065180/