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

Sto*_*ica 5 debugging visual-studio visual-studio-sdk vsix visual-studio-2015

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

重现步骤:

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

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

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

  4. F5开始调试

这将启动 Visual Studio 2015 的实验性实例,并安装了包(在Tools / Extensions and Updates... 中确认),但断点被禁用:

断点禁用

上述步骤来自index.html新创建的 VSIX 项目的入门指南 ( ),因此它应该有效。

附加信息:

  • 解决方案配置为Debug,平台为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.vsixmanifestType=Microsoft.VisualStudio.VsPackage
  • 我尝试在Assets中添加项目source.extension.vsixmanifestType=Microsoft.VisualStudio.MefComponent但这似乎没什么用。在此之后的第一次运行中,断点似乎已启用,但未命中。在第 2 次和后续运行中,断点在运行期间返回禁用状态。
  • 我尝试更改清单中的版本,但我注意到任何影响。
  • 我尝试单独运行实验实例,并使用调试器附加到它,但这与直接使用 启动时的行为方式相同F5,没有任何区别。
  • 我尝试Console.WriteLineInitialize方法中添加语句,但在Output窗口中找不到调试文本。
  • 我尝试了 x86 平台而不是 Any CPU,但结果相同。
  • 一位同事执行了相同的步骤并得到了相同的结果,因此这可能不是我的计算机特有的。(我邀请任何人按照相同的步骤来证明我是错的,或者指出我步骤中的错误。)

所有这些似乎都表明 VS 包没有被初始化,尽管它已经明确安装。我错过了什么?如果相关,这里是 VS 包的源代码,这里是整个虚拟项目。

如果您需要更多信息,请告诉我。

Ser*_*sov 3

仅当需要 VSPackage 的功能时,才会将 VSPackages 加载到 Visual Studio 中。例如,当 Visual Studio 使用 VSPackage 实现的项目工厂或服务时,会加载 VSPackage。此功能称为延迟加载,只要有可能就使用它来提高性能。

要在 VS 启动时自动加载包,通常将 ProvideAutoLoad 属性添加到主包类中。

有关更多详细信息,请参阅加载 VSPackages文档。