我正在编写一个 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 的几个选项可用:
确定您希望支持的最低 Visual Studio 版本,并且仅引用 immutable and/or versioned assemblies来自该版本的 Visual Studio 和更早版本。您的扩展可能会跨多个版本工作,无需更改或特殊考虑。 这是“合理”可能的最佳选择。
导出单个项目,但使用针对特定版本的 Visual Studio 的程序集来实现它。例如,我的 Inheritance Margin 扩展需要引用一个未版本化的程序集,因此我需要为每个受支持的 Visual Studio 版本包含单独的实现。它是通过提供一个 single common exported object
CSharpInheritanceTaggerProvider
来实现的。 ,但标注器本身的实现被委托(delegate)给一个 dynamically selected assembly .导出多个项目,但仅在与当前版本的 Visual Studio 相关的项目中执行操作。 GitDiffMargin 扩展使用此功能将滚动边距控件放置在最合适的位置。虽然程序集不需要对未版本化程序集的任何引用,但从 Visual Studio 2013 开始,UI 中此边距的最佳位置发生了变化,并且 MEF 元数据属性静态确定了位置。
关于c# - Visual Studio 可扩展性 - 每个 Visual Studio 版本的不同 MEF 导出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25820859/