我有一个使用MEF加载插件的应用程序,它工作得很好。所有插件都引用核心库并导出正确的部分,应用程序可以毫无问题地加载部件。
出现的问题与插件库的各个依赖关系有关。一个例子是Ionic.Zip和Newtonsoft.Json。由于在开发这些外部部件时使用了Nugget,因此不同的插件往往会引用这些库的不同版本。应用程序甚至可以加载它自己(在Newtonsoft.Json的情况下)。
我已经意识到插件库正在寻找这些库的特定版本,因此在运行某些任务时会抛出错误。
有没有办法在开发过程中指出插件不应该绑定到任何特定版本的库,以便它只使用所加载的任何内容?
这样,插件的Newtonsoft.Json或Ionic.Zip的哪个版本链接起来并不重要,它只会使用主应用程序加载的版本。
答案 0 :(得分:3)
我相信您正在寻找装配绑定重定向。
您可以通过在应用程序的app.config中添加条目来为给定程序集创建程序集绑定重定向。以下示例将对任何版本的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