从 VS 2013/2015 编译 VS 2012 扩展

Compiling VS 2012 extension from VS 2013/2015

我在 VS 2012 出来的时候写了这个扩展。当时我在 VS 2012 上编译扩展并且只针对 VS 2012.

然后当 VS 2013 出来时,我重新编译了扩展,因此它也可以安装在 VS 2013 上。扩展代码本身可以在 VS 2012/2013/2015 上运行而无需更改。因此,为了允许在 VS 2013 上安装,我只更新了 .vsixmanifest,将所需的 VS 版本从:

更改为
<InstallationTarget Id="Microsoft.VisualStudio.Pro" Version="11.0" />

<InstallationTarget Id="Microsoft.VisualStudio.Pro" Version="[11.0,12.0]" />

它似乎工作正常。

然而,当我后来摆脱我的 VS 2012 安装并想在 VS 2013 上编译扩展时,我遇到了以下参考问题:

<Reference Include="Microsoft.VisualStudio.CoreUtility, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
<Reference Include="Microsoft.VisualStudio.Editor, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
<Reference Include="Microsoft.VisualStudio.Text.Data, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
<Reference Include="Microsoft.VisualStudio.Text.UI, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
<Reference Include="Microsoft.VisualStudio.Text.UI.Wpf, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />

找不到这些程序集的版本 11。我将项目文件编辑为:

<Reference Include="Microsoft.VisualStudio.CoreUtility" />
<Reference Include="Microsoft.VisualStudio.Editor" />
<Reference Include="Microsoft.VisualStudio.Text.Data" />
<Reference Include="Microsoft.VisualStudio.Text.UI" />
<Reference Include="Microsoft.VisualStudio.Text.UI.Wpf" />

然后它编译并且 运行 在 VS 2013 上正常,但显然扩展将需要这些程序集的更高版本,仅在 VS 2013 上可用。因此该扩展不能再安装在 VS 2012 上。我现在遇到了与 VS 2015 类似的问题。

我想我会安装 VS 2012 SDK,这将为我提供这些程序集的版本 11,以针对它们进行编译,但是如果不先安装 VS 2012 就无法安装此 SDK。

有什么方法可以从 VS 2015 编译此扩展,同时允许将该扩展安装在 VS 上,一直到 2012 版?

我注意到 Visual Studio 每个版本都有不同版本的扩展。

如果 VS 特定于它与之通信的程序集的版本,我建议简短的回答是否定的,您不能拥有一个具有一组依赖项的单个项目并创建适用于所有版本的扩展 Visual Studio。

可能只需创建所需程序集的正确版本的副本,并且仍然能够在最新版本中为 Visual Studio 的早期版本编译扩展。但是你需要有程序集。

这就是为什么我更喜欢将第三方程序集签入源代码管理,并保留使用过的程序集的每个版本。您可以使用标签 and/or 为您的扩展的每个版本管理分支。

有人在 NuGet 上上传了所需的 SDK 程序集。从这里开始搜索:https://www.nuget.org/packages?q=VSSDK.Shell