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

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

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

重现步骤:

  • 创建 VSIX 项目:文件/新建/项目/可扩展性/VSIX 项目
  • 添加 Visual Studio 包:在解决方案资源管理器中右键单击项目节点并选择 添加/新项目/可扩展性/Visual Studio 包
  • 打开新创建的包文件( VSPackage1.cs )并在第 68 行,即 Initialize() 的第一行放置一个断点, base.Initialize()
  • F5开始调试

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

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

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

    最佳答案

    VSPackages are loaded into Visual Studio only when their functionality is required. For example, a VSPackage is loaded when Visual Studio uses a project factory or a service that the VSPackage implements. This feature is called delayed loading, which is used whenever possible to improve performance.


    要在 VS 启动时自动加载包,您通常会向主包类添加一个 ProvideAutoLoad 属性。
    Loading VSPackages文档了解更多详情。

    关于visual-studio - 如何在 Visual Studio 2015 中创建的 VSIX 中调试 Visual Studio 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43497943/

    相关文章:

    vb.net - 项目将无法在 Debug模式下启动

    c++ - STL 的自定义分配器仅在 Release模式下无法编译

    c++ - 可执行/in) 代码处无法到达的断点

    perl - 限制 Perl 调试器打印的信息量

    nuget - 我从哪里获得 nuget.exe 3.0+?

    opencv - 使用opencv在c++中进行简单拼接

    c# - 枚举参数在 Visual Studio Asp.Net MVC 中传递不正确的值

    .net - 如何修复引用旧(测试版).NET 版本的程序集?

    Python 方法奇怪地暂停,直到 tkinter root 关闭

    android - 无法在 Visual Studio 2015 中创建新的空白应用 (Android)