gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:47:23 26 4
gpt4 key购买 nike

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

我目前正在迁移此扩展以与 VS 2012/2013 兼容。我已经发现可以手动编辑旧的 VSIX list ,以允许扩展额外安装到 VS 2012/2013 - 这非常有效。

但是,我目前使用的一些 VS 2010 API 与 VS 2012++ 不兼容,我需要更新它们——放弃向后兼容性。

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

旁注:我正在使用 MEF 来组成我的内部功能单元。这会使事情变得更容易吗?

最佳答案

你可以:

  1. 将两个特定于版本的程序集公开的功能分离到一个临时接口(interface)(如果您愿意,您可以将其自身放入主机程序集中),就像您可以对所有其他 MEF 插件所做的那样;我们称它为 IDoWork;
  2. 在两个具体类型中实现上述接口(interface),由两个不同的程序集公开,一个用于您支持的每个 VS 版本,例如DoWorkVs2010DoWorkVs2012;

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

.3.(可选)[Export]这两种类型,通过 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 ...;
}
}

关于c# - 如何为多个 Visual Studio 版本打包基于 VSIX 的扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20214796/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com