【问题标题】:Can a MEF application built on .NET 4 import types built against .NET 3.5?基于 .NET 4 构建的 MEF 应用程序能否导入针对 .NET 3.5 构建的类型?
【发布时间】:2010-08-04 13:59:29
【问题描述】:

我正在使用托管可扩展性框架开发一个宿主应用程序,它是针对 .NET 4 和框架中内置的 System.ComponentModel.Composition 程序集构建的。我想支持使用 .NET 3.5 开发部件并以声明方式导出它们的能力。

由于导出属性是 .NET 4 中的新属性,因此无法被 .NET 3.5 程序集引用,因此我不确定导出部件的最佳方式。有没有一种简单的方法可以做到这一点,而无需实现一种使用其他机制来发现导出的新型目录?

【问题讨论】:

    标签: .net mef


    【解决方案1】:

    您可以为AppDomain.AssemblyResolve 编写一个处理程序,该处理程序将在请求 3.5 版本时返回 MEF 的 .NET 4 版本。但是,您编写的处理程序仅在使用默认绑定逻辑找不到程序集时才会使用,因此您需要确保 3.5 MEF DLL 不可用,或者可能加载没有上下文的扩展程序集( see here) 以防止它解析为该 DLL。

    【讨论】:

    • 抱歉延迟回复。我开始测试这个,它确实有效。不幸的是,他们找不到使用相同密钥对其进行签名的方法,因此他们可以使用发布商政策对其进行重定向,但我猜这就是生活。
    【解决方案2】:

    您可以使用 Assembly Binding Redirect 来针对 .NET 3.5 版本的 MEF 编译扩展,但让它们在运行时使用 .NET 4 版本。

    【讨论】:

    • 好建议,但不幸的是,MEF 3.5 版本是通过 CodePlex 发布的,因此它具有不同的公钥令牌。据我所知,程序集重定向只会重定向版本号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 2016-05-28
    • 2013-09-16
    • 2018-04-16
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多