我的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中的一些目标/任务但是哪些以及如何使用?
答案 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" />
诀窍是让这个导入动态:
这是通过附加变量(“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>