c# - MEF 中的 Dll 版本控制

标签 c# .net mef

我有一个使用 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/

相关文章:

c# - 实现代码问题

c# - 如何使用 Newtonsoft JSON(反)序列化 XmlException?

c# - 找不到源 'x' 中事件 ID 'y' 的描述。从 eventvwr C# 读取 'System' 事件日志

c# - 如何捕获 .NET 的 MVC 中的过滤器抛出的异常?

c# - 使用 SqlDataReader 时,如何使来自 BLOB 的流在普通旧 C# 对象中可用?

asp.net动态加载程序集

silverlight - MEF/PRISM 银光

c# - 使用C#修改注册表中的子项

c# - ASP.NET 网络 API 2 : ExceptionLogger and Exception Handler

c# - 在 ASP.Net 应用程序中添加数据集问题