2

我无法在最简单的VSIX项目中调试最简单的VS包。如何调试在Visual Studio 2015中创建的VSIX中的Visual Studio包

重现步骤:

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

  2. 添加的Visual Studio包:右键单击在解决方案的项目节点Explorer并选择添加/新建项目/可扩展性/ Visual Studio包装

  3. 打开新创建的pa ckage文件(VSPackage1.cs)将断点上线68的Initialize()第一线,base.Initialize()

  4. F5开始调试

这将启动的Visual Studio 2015年的一个实验实例中,与包安装(确认工具/扩展和更新...),但断点被禁用:

breakpoint disabled

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

附加信息:

  • 解决方案配置为调试,平台是任何CPU
  • 该项目的调试属性自动拥有启动外部程序设置为C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe命令行论据设置为/rootsuffix Exp
  • 我设置个拷贝调试符号到输出目录True,之后的projectname.pdb文件中正确地出现在bin\Debug
  • bin\Debug\projectname.vsix文件包含projectname.pdb
  • 该项目包括在资产source.extension.vsixmanifestType=Microsoft.VisualStudio.VsPackage
  • 我尝试添加该项目在资产source.extension.vsixmanifestType=Microsoft.VisualStudio.MefComponent但这似乎并没有太多。在此之后的第一次运行中,断点似乎已启用,但未被击中。在第二次和以后的运行中,断点在运行期间回到禁用状态。
  • 我试着改变清单中的版本,但是我注意到了任何影响。
  • 我试着单独运行实验实例,并使用调试器附加到实验实例上,但其运行方式与直接启动F5时的操作方式没有什么不同。
  • 我尝试在Initialize方法中添加Console.WriteLine语句,但我在Output窗口中找不到调试文本。
  • 我试过x86平台而不是任何CPU,但结果相同。
  • 一位同事遵循相同的步骤,得到了相同的结果,所以它可能不是特定于我的电脑。 (我邀请任何人请遵循相同的步骤,并证明我错了,或者被发现在我的脚步的错误。)

这一切似乎表明,在VS包是没有得到初始化,虽然这明显是安装。我错过了什么?如果相关,here是VS包的源代码,而here是整个虚拟项目。

如果您需要更多信息,请让我知道。

回答

1

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

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

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

+0

工作就像一个魅力,谢谢! – janos