如何在VS中调试VSIX扩展,这是其他版本的VS SDK正在使用的版本

时间:2016-02-02 15:13:25

标签: visual-studio visual-studio-extensions vsix vsx visual-studio-sdk

我的Visual Studio扩展程序有一个解决方案。此扩展应该适用于自VS2010以来的任何VS版本。那是因为我使用VS 2010 SDK。我做了hacks将我的项目绑定到VS2010 SDK程序集和目标,无需安装SDK即可工作 - 感谢this detailed guide by Aaron Marten。 我可以成功构建我的扩展的vsix并在任何VS中安装它。好的。

但我也想用F5调试我的扩展程序。我希望不是在VS2010中,而是在我的情况下在其他一些VS-VS 2015中。我甚至安装了VS 2015 SDK。但它显然不起作用。由于VS2010 SDK的目标应该部署在VS2010实验实例中的扩展。

所以问题是:
如果扩展本身使用VS2010 SDK ,如何设置项目以使用F5调试VS2015中的vsix扩展?

可能我需要使用VS2015 SDK中的一些目标/任务但是哪些以及如何使用?

2 个答案:

答案 0 :(得分:3)

这里的提交历史记录中提供了如何实现此目的的逐步说明:https://github.com/jaredpar/RoundTripVSIX/commits/master(我在我的VS扩展“SQL Server Compact Toolbox”中成功使用了它)

答案 1 :(得分:3)

为了简单起见,我把解决方案放在这里。它取自https://github.com/jaredpar/RoundTripVSIX/commits/master - 请参阅@ErikEj的答案,加上一小部分。

通常我们将Microsoft.VsSDK.targets文件导入我们的VS包项目的csproj。由于我的项目不依赖于全局安装的VS SDK,因此我使用VS2010 SDK从本地文件夹导入:

<Import Project="..\..\SDK\v10.0\MSBuild\VSSDK\Microsoft.VsSDK.targets" />

诀窍是让这个导入动态:

  • 当我们进入VS时,应该导入当前 VS版本的VSSDK目标
  • 当我们构建项目时,应该导入最小支持VS版本的VSSDK目标(如前所述)。

这是通过附加变量(“VsSdkTargets” - 名称可以是任意)来实现的:

<Import Condition="Exists($(VsSdkTargets))" Project="$(VsSdkTargets)" />

这里是VsSdkTargets的定义(应该在导入之前):

<PropertyGroup>
  <VsSdkTargets Condition=" '$(VisualStudioVersion)' == '' or '$(BuildingInsideVisualStudio)' != 'false' ">..\..\SDK\v10.0\MSBuild\VSSDK\Microsoft.VsSDK.targets</VsSdkTargets>
  <VsSdkTargets Condition=" '$(BuildingInsideVisualStudio)' == 'true' ">$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\VSSDK\Microsoft.VsSDK.targets</VsSdkTargets>

</PropertyGroup>

这使我们的导入动态基于变量VisualStudioVersion 的可用性,该变量仅在VS BuildingInsideVisualStudio内可用。在VS内部构建时,BuildingInsideVisualStudio将为true

如果您需要在不同的VS版本中打开解决方案,那么我们还需要添加MinimumVisualStudioVersion变量的自定义

<PropertyGroup>
  <!-- This is added to prevent forced migrations in Visual Studio 2012 and newer -->
  <MinimumVisualStudioVersion Condition="'$(VisualStudioVersion)' != ''">$(VisualStudioVersion)</MinimumVisualStudioVersion>
</PropertyGroup>

为了在所有受支持的Visual Studio版本中以直接的方式(F5)启动调试,并且独立于项目的用户设置,您应该将以下说明附加到第一个PropertyGroup:< / p>

<PropertyGroup>
  ...
  <StartAction>Program</StartAction>
  <StartProgram>$(DevEnvDir)\devenv.exe</StartProgram>
  <StartArguments>/rootsuffix Exp</StartArguments>
</PropertyGroup>