如何为多个Visual Studio版本打包基于VSIX的扩展?

弗洛里安·格雷纳赫(Florian Greinacher)

我正在维护公司内部的Visual Studio扩展,该扩展已打包并部署为VSIX容器。此扩展当前以VS 2010为目标。它使用多个VS API DLL,并引用了它们的VS 2010版本。

我目前正在迁移此扩展程序,以使其与VS 2012/2013兼容。我已经发现旧的VSIX清单可以手动编辑,以允许该扩展程序另外安装到VS 2012/2013-完美地工作。

但是,我当前使用的某些VS 2010 API与VS 2012 ++不兼容,我需要对其进行更新-从而放弃向后兼容。

我的问题是:如何构造我的解决方案和VSIX,使其与VS 2010、2012和2013兼容。是否有一个针对VS 2010的DLL和一个针对VS 2012/2013的DLL并选择一个要使用的DLL是否可行?在扩展加载时间?

旁注:我正在使用MEF来构成我的内部功能单元。这会以任何方式使它更容易吗?

埃夫兰·科比西(Efran Cobisi)

您可以:

  1. 将这两个特定于版本的程序集公开的功能解耦到一个临时接口(如果需要,可以将其自身放入主机程序集),就像对其他所有MEF插件所做的一样;叫它吧IDoWork
  2. 以两种具体类型实现上述接口,由两种不同的程序集公开,每种类型针对您所支持的VS版本,例如DoWorkVs2010DoWorkVs2012

    • AssemblyForVS2010.dll-> DoWorkVs2010:IDoWork
    • AssemblyForVS2012.dll-> DoWorkVs2012:IDoWork

3.(可选[导出]两种类型,以通过MEF提供它们;例如:

    [Export(typeof(IDoWork))]
    class DoWorkVs2010 : IDoWork
    {
        // ...
    }

4.在您的主机部件中添加一个工厂(该工厂直接与VSX一起加载),然后在此处基于DTE版本构建您要查找的具体类型:

    static class DoWorkFactory
    {
        internal static IDoWork Build()
        {
            // Load the version-specific assembly

            // - Via reflection (see http://stackoverflow.com/a/465509/904178)
            // - Or via MEF

            return ...;
        }
    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何卸载.vsix Visual Studio扩展?

无法安装Visual Studio扩展.VSIX

调试 VSIX(visual studio 扩展)的问题

如何使我的 Visual Studio 市场 VSIX 扩展公开可见

如何为文档注册Visual Studio扩展程序提供程序

如何为Visual Studio创建可以直接与TFS交互的扩展?

如何为.cshtml文件创建Visual Studio扩展名?

如何为 Visual Studio Code 创建 Stripe 扩展

如何创建针对Visual Studio社区版的Visual Studio扩展(vsix)

如何为Visual Studio创建动态定义?

如何为Java设置Visual Studio 2013

如何为visual studio设置Podofo?

Visual Studio扩展项目:如何更改目标Visual Studio版本?

无法在Visual Studio Express 2013中安装VSIX扩展文件?

使用.NET 5.0编写Visual Studio扩展(VSIX)

Vsix(Visual Studio扩展)右键单击文件的完整路径

无法使用.vsix文件安装Visual Studio Community 2015扩展

如何包括一个Visual Studio扩展名的NuGet包(VSIX)

如何在Mac上的Visual Studio中安装.vsix扩展文件?

Visual Studio 扩展:如何处理多个插入符号?

如何为多个文件上传创建基于类的视图

在 Visual Studio 中为 Visual Studio 扩展 (VSIX) 获取选定的选项卡

如何打包面向通用Windows平台并依赖Visual Studio扩展SDK的.NET库?

如何在Azure DevOps中自动执行Visual Studio Code扩展打包?

如何为Visual Studio 2010或2013的备用文件扩展名获取语法突出显示?

如何为Visual Studio 2013 Community Edition获取Android SDK

如何为特定配置生成Visual Studio项目?

如何为Visual Studio代码正确设置PYTHONPATH

如何为Visual Studio Code编辑默认的深色主题?