我有一个使用MEF加载插件的应用程序,它工作得很好。所有插件都引用核心库并导出正确的部分,并且应用程序加载这些部分不会有任何问题。
出现的问题与插件库的各个依赖关系有关。一个示例是Ionic.Zip和Newtonsoft.Json。由于开发这些外部部件时使用了Nugget,因此不同的插件倾向于引用这些库的不同版本。该应用程序甚至可以加载自己的应用程序(对于Newtonsoft.Json)。
我已经意识到插件库正在寻找这些库的特定版本,因此在运行某些任务时会引发错误。
有没有一种方法可以在开发过程中指示插件不应绑定到库的任何特定版本,以便仅使用加载的任何内容?
这样,插件链接到哪个版本的Newtonsoft.Json或Ionic.Zip都无关紧要,它将仅使用主应用程序已加载的版本。
我相信您正在寻找程序集绑定重定向。
您可以通过在应用程序的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>
您可以在此链接中找到更多信息重定向程序集版本
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句