我正在维护一个公司内部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来编写我的内部功能单元。这会让它变得更容易吗?
答案 0 :(得分:5)
你可以:
IDoWork
; 以两种具体类型实现上述接口,由两个不同的程序集公开,一个用于您支持的每个VS版本,例如: DoWorkVs2010
和DoWorkVs2012
;
。 3.(可选)[Export]这两种类型,通过MEF提供; e.g:
[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 ...;
}
}
答案 1 :(得分:0)
使用Jared Par的these VSIX templates。它们的开发目的是使您的VSIX项目可以在多个VS版本中安装和打开。看起来他们可能需要为VS2015进行梳洗,但他们绝对是大多数VSIX开发的起点。