繁体   English   中英

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

[英]How to package a VSIX-based extension for multiple Visual Studio versions?

我正在维护一个公司内部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并选择一个使用的在延长加载时间?

旁注:我正在使用MEF来构建我的内部功能单元。 这会让它变得更容易吗?

你可以:

  1. 将两个特定于版本的程序集公开的功能分离到一个ad-hoc接口(如果您愿意,可以将其自身放入主机程序集中),就像您可能对每个其他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 ...;
        }
    }

使用Jared Par的这些VSIX模板 它们的开发目的是使您的VSIX项目可以在多个VS版本中安装和打开。 看起来他们可能需要为VS2015进行梳洗,但它们绝对是大多数VSIX开发的起点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM