我在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版本?
答案 0 :(得分:3)
有人在NuGet上传了所需的SDK程序集。从这里开始搜索:https://www.nuget.org/packages?q=VSSDK.Shell
答案 1 :(得分:0)
我注意到每个Visual Studio版本都有不同版本的扩展。
如果VS特定于它所讨论的程序集的版本,我建议简短的答案是否定的,你不能拥有一组具有一组依赖项的项目,并创建适用于所有Visual Studio版本的扩展。
可能只需要创建所需程序集的正确版本的副本,并且仍然能够在最新版本中编译Visual Studio早期版本的扩展。但是你需要有组件。
这就是为什么我更喜欢将第三方程序集检查到源代码控制中,并保留所使用的程序集的每个版本。您可以使用扩展程序的每个版本的标记和/或分支来管理它。