无法调试VSIX项目

15

我正在尝试开发我的第一个Visual Studio扩展项目,我已经安装了VS10 SDK,并且能够创建新的项目并构建它,但是当我尝试调试时,符号没有加载。我知道我可以对VSIX项目进行调试,因为我从网上下载了示例项目,其符号已加载,断点也被正确命中 http://weshackett.com/2009/11/configure-vsix-project-to-enable-debugging/)。所以可能与我创建的VSIX项目方式有关(也许!)。 我注意到一件事情,即dll和文件没有被复制到本地的“应用程序数据”区域,只有清单被复制过去了,而样例项目中所有文件都被复制过去了,包括dll。我已经比较了两者的项目设置,它们都相同。如果需要更多信息,请告诉我...


符号未加载到任何内容还是只有您的代码?您确定您的代码实际上正在被加载(通过消息框或其他机制)吗? - JaredPar
1
嗨,看起来问题比那更基础,编译的 DLL 没有被复制到 Debug 目录中。我正在使用标准的 VSIX 项目模板。 - Rubans
不好意思问一下,你确定你正在构建调试版本吗? - JaredPar
我也曾这样想,但肯定要在调试模式下构建。 - Rubans
好的,可能已经搞清楚了,输出目录属性默认设置为不复制,现在改为复制更新的文件。将调查是否意味着文件现在被复制到应用数据文件夹中。 - Rubans
8个回答

22

好的,我设法使它工作了。为此,我必须卸载vsix项目并将文件编辑为XML文档。

要么从项目文件中删除以下行:

<IncludeAssemblyInVSIXContainer>
    false
</IncludeAssemblyInVSIXContainer>
<IncludeDebugSymbolsInVSIXContainer>
    false
</IncludeDebugSymbolsInVSIXContainer>
<IncludeDebugSymbolsInLocalVSIXDeployment>
    false
</IncludeDebugSymbolsInLocalVSIXDeployment>
<CopyBuildOutputToOutputDirectory>
    false
</CopyBuildOutputToOutputDirectory>
<CopyOutputSymbolsToOutputDirectory>
    false
</CopyOutputSymbolsToOutputDirectory>

或将它们设置为true:

<IncludeAssemblyInVSIXContainer>
    true
</IncludeAssemblyInVSIXContainer>
<IncludeDebugSymbolsInVSIXContainer>
    true
</IncludeDebugSymbolsInVSIXContainer>
<IncludeDebugSymbolsInLocalVSIXDeployment>
    true
</IncludeDebugSymbolsInLocalVSIXDeployment>
<CopyBuildOutputToOutputDirectory>
    true
</CopyBuildOutputToOutputDirectory>
<CopyOutputSymbolsToOutputDirectory>
    true
</CopyOutputSymbolsToOutputDirectory>
如果它们不存在,或者将它们添加到节点下面。
一旦我删除了这些行并重新构建解决方案,dll和pdb文件就像预期的那样被复制到bin\debug文件夹以及"AppData\Local\Microsoft\VisualStudio\10.0Exp\Extensions\"文件夹中。

找到了与问题相关的进一步链接:https://connect.microsoft.com/VisualStudio/feedback/details/515487/vs-sdk-vsix-project-properties-tab-is-incomplete-and-therefore-misleading - Rubans
https://dev59.com/j0rSa4cB1Zd3GeqPWXKY - Rubans
1
这对我来说在最新的VS2019版本中非常有效。 - Christian
1
好的建议,但显然还不够。完全荒谬。 - Emperor Eto
2
很不幸,这个主题上的所有建议似乎都没有任何帮助,vsix调试完全混乱了。 - Jaroslav Daníček

10

我有过同样的经历,在VS-2019中开发了一个工作正常的VSIX异步插件,但在某个特定点上,Visual Studio实验版本在调试模式下停止加载我的VSIX。

我不确定根本原因是什么,但它与在同一解决方案中打开第二个VSIX项目模板同时发生。不知道这是否与问题有关,但在第一次运行时,我发现两个VSIX都加载到实验版本会话中。此时,我关闭并重置了实验版本。在后续运行中,当调试时似乎没有VSIX加载到实验版本中…非常沮丧!

我找到的解决方法如下:

  • 关闭所有Visual Studio实例
  • 使用开始菜单中的命令行工具重置Visual Studio实验版
  • 打开VS,加载您的VSIX解决方案
  • 清理您的VSIX解决方案
  • 切换到发布模式(是的,请这样做..)
  • 重新构建解决方案然后运行
  • 在“只调试我的代码”警告弹窗上,选择“继续调试”
  • 实验版本现在将以您的VSIX启动!它被加载了!
  • 调试时发布模式不方便。 关闭实验版本,您将回到您的VSIX解决方案
  • 切换回调试模式
  • 再次运行

对我来说,上述步骤让问题消失了。VSIX加载正常。


3
难以置信,但我认为这确实起作用了! - Paul Schroeder
rootsuffix已经设置正确,但VS-exp仍未加载我的VSIX。上述过程解决了我的问题(2x)。我不确定在什么其他情况下它会起作用... - Goodies
给这个人颁发一枚奖章。 - Frank
@Frank 大多数勋章都可能会被拒绝... 在SO上,我更喜欢赞成票 :p - Goodies
@Goodies 为什么? - Frank
虚荣是虚无,一切都是虚无。这是我在SO上的一个好答案,我没有很多。 - Goodies

4
我在Visual Studio 2017中遇到了类似的问题。@Rubans所描述的选项似乎不再必要。
在当前的构建配置(很可能是Debug),您需要确保在Vsix属性页面中选中Deploy VSIX content to experimental instance for debuggingenter image description here

3
谢谢,但对我不起作用。它已经启用了,但符号仍未加载。还有其他想法吗? - Paul
这篇文章对于我的情况很有帮助,我需要禁用这个调试选项:'Break when an exception crosses AppDomain or managed/native boundaries'。 - dsungaro

3
我也遇到了同样的问题——调试开始了,但我在哪里设置断点都会看到它们被注释为“无效”,并显示“断点将不被命中”。我查看了这里其他答案中的所有内容,然后在一个插件项目存储库中找到了“贡献指南”(特定版本的永久链接)。
因此,帮助我的是以下步骤:打开项目属性,在“调试”选项卡上确保:
  1. “启动操作”设置为“启动外部程序”,并且路径与 devenv.exe 的路径匹配,例如“C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\devenv.exe”,这是默认设置。

  2. “启动选项”将“命令行参数”设置为/rootsuffix Exp - 这是默认情况下缺少的,我必须添加它

因此,一旦我添加了 /rootsuffix Exp,它就可以正常工作——下次我按 F5 时,插件代码中的断点将起作用。

1
这也是在使用VS2019时处理VSIX的正确方法。 - Paul Renton
/rootsuffix Exp 对我来说也在使用 VS2022 中修复了,非常感谢! - Nightmare_82

0

我也遇到了同样的问题,在Visual Studio 2019中,调试命令运行参数是/rootsuffix Roslyn

我尝试更新项目并重新构建,但没有起作用。 幸运的是,我找到了另一种调试方法。 那就是unitTest。 在最新的解决方案中,由vsix模板创建;它包含了uniteTests项目。

在testmethod中,您可以调用VerifyCSharpc方法来测试Diagnostic,并调用VerifyCSharpFix方法来测试Fix;当您调试unitTest时,您可以命中正确的断点。


0

我必须执行以下操作:

  1. 确保您的符号设置已正确配置 输入图像描述
  2. 我必须提高扩展版本。只需将其设置为比本地安装的版本号更高即可: 输入图像描述

0

意外地在 VS 2017 15.9.20 中找到了解决方法。

简单来说:在新的 VS 中卸载您的扩展程序,通过 F5 重新运行新的 VS,然后清理并重建解决方案,最后再次通过 F5 运行。

当您在卸载扩展程序后重新运行 VS 时,新的 VS “理解”您的扩展程序已被移除。之后,您需要重建代码并将其“放入”新的 VS 中。

详细步骤:

  • 通过 F5 运行,在新的 VS 中转到“扩展”,卸载您的扩展程序
  • 关闭新的 VS
  • 在打开的“卸载 VSIX”窗口中 - 卸载您的扩展程序
  • 不要更改任何内容,只需通过 F5 重新运行代码,检查在新启动的 VS 中是否已删除扩展程序,然后关闭新的 VS
  • 在您的编码 VS 中 - 清理解决方案
  • 重建
  • 通过 F5 运行,享受吧!

0
你可以尝试重置 Visual Studio 实验版(对我有效)。 转到开始菜单 -> Visual Studio 2019 -> 重置 Visual Studio 2019 实验实例
(每个 Visual Studio 版本都有其链接)

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