如何在由Visual Studio 2015创建的VSIX中调试Visual Studio Package

5

我无法在最简单的VSIX项目中调试最简单的VS包。

重现步骤:

  1. 创建一个VSIX项目:文件/新建/项目/可扩展性/VSIX项目

  2. 添加Visual Studio包:在解决方案资源管理器中右键单击项目节点,然后选择添加/新建项/可扩展性/Visual Studio包

  3. 打开新创建的包文件(VSPackage1.cs),并在Initialize()的第一行base.Initialize()上设置断点,即第68行

  4. 按下F5开始调试

这会启动Visual Studio 2015的实验版,并安装了该包(在工具/扩展和更新...中确认),但断点被禁用:

breakpoint disabled

以上步骤来自新创建的VSIX项目的入门指南(index.html),因此应该可以工作。

附加信息:

  • 解决方案配置为 调试(Debug),平台为 任何CPU(Any CPU)
  • 项目的调试属性自动设置了 启动外部程序C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe 并设置了 命令行参数/rootsuffix Exp
  • 我将 将调试符号复制到输出目录(Copy Debug Symbols to Output Directory) 设置为 True,然后 projectname.pdb 文件正确地出现在 bin\Debug
  • bin\Debug\projectname.vsix 文件包含 projectname.pdb
  • 该项目在 source.extension.vsixmanifestAssets 中以 Type=Microsoft.VisualStudio.VsPackage 的形式包含
  • 我尝试将项目添加到 source.extension.vsixmanifestAssets 中,类型为 Type=Microsoft.VisualStudio.MefComponent 但似乎没有什么效果。第一次运行后,断点出现且启用,但没被打中。在第二次和后续运行期间,断点再次变为禁用状态。
  • 我尝试更改清单中的版本,但没有看到任何影响。
  • 我尝试单独运行实验性实例并使用调试器附加到它,但与直接使用 F5 启动时一样,没有任何区别。
  • 我在 Initialize 方法中添加了 Console.WriteLine 语句,但无法在 Output 窗口中找到调试文本。
  • 我尝试使用 x86 平台而不是 Any CPU,但结果相同。
  • 我的同事遵循相同的步骤,并获得相同的结果,因此这可能不是特定于我的计算机。 (我邀请任何人都可以遵循相同的步骤证明我错了,或在我的步骤中发现错误。)

所有这些似乎表明 VS 包未初始化,尽管它已明确安装。我错过了什么?如果相关,请参考此处的 VS 包源代码以及此处的整个虚拟项目。如果需要更多信息,请告诉我。

2个回答

3
当需要使用VSPackage的功能时,它们才会被加载到Visual Studio中。例如,当Visual Studio使用项目工厂或VSPackage实现的服务时,VSPackage会被加载。这个特性被称为延迟加载,尽可能使用它以提高性能。
要在VS启动时自动加载软件包,通常需要将ProvideAutoLoad属性添加到主软件包类中。
更多详细信息请参见“加载VSPackages”文档。

0
补充一下其他答案,针对OP实际问题的解决方案是:
只需忽略该消息,不必担心。这些符号现在没有被加载,但在断点准备好被触发时它们将会被加载。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接