c# - Visual Studio 可扩展性 - 每个 Visual Studio 版本的不同 MEF 导出?

标签 c# mef vsx visual-studio-sdk

我正在编写一个 Visual Studio 扩展,我想根据运行的 Visual Studio 版本 [导出] 给定接口(interface)的不同实现 - 例如,一个实现用于 Visual Studio 2010 和 2012,另一个实现用于Visual Studio 2013 和 Visual Studio“14”。

我意识到我可以简单地为每个 Visual Studio 版本部署一个不同的 DLL,但我想知道是否有办法避免这种情况 - 运送相同的 DLL 和相同的 vsixmanifest,但让我的扩展动态 [Export] 正确接口(interface)版本。

最 Eloquent 方法是什么?

最佳答案

从您的问题中不清楚您是否确实需要 具有单独的导出。支持多个版本的 Visual Studio 的几个选项可用:

  1. 确定您希望支持的最低 Visual Studio 版本,并且仅引用 immutable and/or versioned assemblies来自该版本的 Visual Studio 和更早版本。您的扩展可能会跨多个版本工作,无需更改或特殊考虑。 这是“合理”可能的最佳选择。

  2. 导出单个项目,但使用针对特定版本的 Visual Studio 的程序集来实现它。例如,我的 Inheritance Margin 扩展需要引用一个未版本化的程序集,因此我需要为每个受支持的 Visual Studio 版本包含单独的实现。它是通过提供一个 single common exported object CSharpInheritanceTaggerProvider 来实现的。 ,但标注器本身的实现被委托(delegate)给一个 dynamically selected assembly .

  3. 导出多个项目,但仅在与当前版本的 Visual Studio 相关的项目中执行操作。 GitDiffMargin 扩展使用此功能将滚动边距控件放置在最合适的位置。虽然程序集不需要对未版本化程序集的任何引用,但从 Visual Studio 2013 开始,UI 中此边距的最佳位置发生了变化,并且 MEF 元数据属性静态确定了位置。

关于c# - Visual Studio 可扩展性 - 每个 Visual Studio 版本的不同 MEF 导出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25820859/

相关文章:

C#:尝试在不同类中使用控制元素 - "object reference is required"

c# - 在 DateTimePicker 中处理点击 Today

c# - WCF 类型问题?

c# - 使用两个单独的 MEF 插件容器是一种不好的做法吗?

visual-studio - 编译器错误: Same identity, EnvDTE80

visual-studio - Visual Studio 可扩展性 : Adding existing folders to a project

visual-studio - 在构建期间从 Visual Studio 扩展传递自定义项目属性

c# - Windows服务是否需要.Net Runtime

c# - 将 MEF 与 C# 结合使用,如何从插件调用主机上的方法?

c# - 配置单例并将其公开给 MEF/PRISM 应用程序中的所有模块