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

时间:2017-04-19 13:59:55

标签: visual-studio debugging visual-studio-2015 vsix visual-studio-sdk

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

重现的步骤:

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

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

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

  4. F5开始调试

  5. 这将启动Visual Studio 2015的实验性实例,并安装该软件包(在工具/扩展和更新...... 中确认),但断点已被禁用:

    breakpoint disabled

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

    其他信息:

    • 解决方案配置为调试,平台为任何CPU
    • 项目的Debug属性会自动将启动外部程序设置为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.vsixmanifest Type=Microsoft.VisualStudio.VsPackage
    • 资产
    • 我尝试使用source.extension.vsixmanifestType=Microsoft.VisualStudio.MefComponent资产中添加项目,但这似乎并不多。在此之后的第一次运行中,断点似乎已启用,但未被击中。在第二次和后续运行中,断点在运行期间返回到禁用状态。
    • 我尝试更改清单中的版本,但我发现有任何影响。
    • 我尝试单独运行实验实例,并使用调试器附加到实验实例,但其行为与直接使用F5启动时的行为相同,没有任何区别。
    • 我尝试在Console.WriteLine方法中添加Initialize语句,但我在Output窗口中找不到调试文本。
    • 我试过x86平台而不是任何CPU,但结果相同。
    • 一位同事按照相同的步骤得到了相同的结果,所以它可能不是我的电脑特有的。 (我邀请任何人请遵循相同的步骤并证明我的错误,或者发现我的步骤中的错误。)

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

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

2 个答案:

答案 0 :(得分:3)

  

VSPackage仅在其功能时加载到Visual Studio中   是必须的。例如,在Visual Studio中加载VSPackage   使用项目工厂或VSPackage实现的服务。   此功能称为延迟加载,无论何时使用   可以提高绩效。

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

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

答案 1 :(得分:0)

为了补充其他答案,OP的实际问题的解决方案是:

请忽略该消息,不要担心。符号不会立即加载 ,但是在断点准备好被击中时它们将被加载。