【问题标题】:How to debug VSIX extension in VS which is of other version then version of VS SDK being used如何在 VS 中调试 VSIX 扩展,该扩展是其他版本,然后是正在使用的 VS SDK 版本
【发布时间】:2016-02-02 15:13:24
【问题描述】:

我的 Visual Studio 扩展有一个解决方案。这个扩展应该适用于自 VS2010 以来的任何 VS 版本。那是因为我使用 VS 2010 SDK。我做了一些技巧来将我的项目绑定到 VS2010 SDK 程序集和目标,以便在没有安装 SDK 的情况下工作 - 感谢this detailed guide by Aaron Marten。 我可以成功构建我的扩展的 vsix 并将其安装在任何 VS 中。不错。

但我也想用 F5 调试我的扩展。我不想在 VS2010 中执行此操作,而是在其他一些 VS - VS 2015 中执行此操作。我什至安装了 VS 2015 SDK。但这显然不起作用。作为 VS2010 SDK 的目标,应该部署正在构建到 VS2010 实验实例中的扩展。

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

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

【问题讨论】:

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


    【解决方案1】:

    如何实现这一点的分步描述可在此处的提交历史中找到:https://github.com/jaredpar/RoundTripVSIX/commits/master(我在我的 VS 扩展“SQL Server Compact Toolbox”中成功使用它)

    【讨论】:

    • 非常感谢,这正是我所需要的!
    • 它似乎不再工作了 - 对于 VS 2017 及以后的版本
    【解决方案2】:

    为了简单起见,我将解决方案放在这里。它取自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

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

    【讨论】:

      猜你喜欢
      • 2017-07-26
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      • 2017-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多