MEF中的DLL版本控制

时间:2014-02-27 10:07:52

标签: c# .net mef

我有一个使用MEF加载插件的应用程序,它工作得很好。所有插件都引用核心库并导出正确的部分,应用程序可以毫无问题地加载部件。

出现的问题与插件库的各个依赖关系有关。一个例子是Ionic.Zip和Newtonsoft.Json。由于在开发这些外部部件时使用了Nugget,因此不同的插件往往会引用这些库的不同版本。应用程序甚至可以加载它自己(在Newtonsoft.Json的情况下)。

我已经意识到插件库正在寻找这些库的特定版本,因此在运行某些任务时会抛出错误。

有没有办法在开发过程中指出插件不应该绑定到任何特定版本的库,以便它只使用所加载的任何内容?

这样,插件的Newtonsoft.Json或Ionic.Zip的哪个版本链接起来并不重要,它只会使用主应用程序加载的版本。

1 个答案:

答案 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