如何调试Visual Studio扩展


93

我只是在为Visual Studio 2010写VSIX扩展,却不知道如何调试它。

一种明显的方法是输出消息。扩展模板使用Trace.WriteLine()。但是在哪里可以找到它的输出呢?

Answers:


184

Visual Studio Extensions可以像其他任何应用程序一样进行调试。您只需要设置调试体验即可使用加载的扩展程序启动devenv。尝试以下

  • 右键单击项目,然后选择属性
  • 转到调试选项卡

单击的单选按钮Start External Program。将其指向devenv.exe二进制文件。在我的机器上,它位于

C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ devenv.exe

在非x64机器上,尽管可以删除“(x86)”部分。

然后将命令行参数设置为/rootsuffix Exp。这告诉Visual Studio使用实验性配置单元而不是常规配置配置单元。默认情况下,构建时,VSIX扩展会在实验配置单元中注册自己。

现在您可以使用F5,它将以VSIX作为可用扩展启动Visual Studio。


谢谢您的回答,一口气解决了一个问题。多谢!
理查德·格里菲斯

@JaredPar-有没有办法告诉vs2012扩展以在vs2015预览版的实验配置单元中注册自己?
Srikanth Venugopalan 2014年

1
看来,仅当您用于调试和测试的版本相同时,此方法才有效。因此,您无法在2013年调试并在2015年运行扩展。@SrikanthVenugopalan
Maria Ines Parnisari

@miparnisari-是的,看来。但是,如果您支持多个版本,那会有些痛苦。
Srikanth Venugopalan'3

2
嗨,您的意思是它将以我的VSIX作为“可用扩展”启动VS?在哪里可以找到可用的扩展?当我转到工具->扩展和更新时,我只会看到“已安装”,“在线”和“更新”。
pabrams

54

@JaredPar接受的答案在技术上是正确的,但是会遭受这样的事实,即您需要为每个开发人员重做一次,每次获得新的代码副本时,以及每次csproj.user删除文件时都必须重做。当您这样做时,设置将保存在csproj.user文件中。

更好的选择是将设置放入csproj文件中,以免丢失。不幸的是,Visual Studio不允许您自动执行此操作,因此您需要手动添加设置。幸运的是,任何项目的设置都相同。

右键单击并卸载项目,然后再次右键单击并编辑csproj项目文件。在XML中,将以下内容添加到第一个中PropertyGroup,例如紧随其后TargetFramework

<StartAction>Program</StartAction>
<StartProgram>$(DevEnvDir)\devenv.exe</StartProgram>
<StartArguments>/rootsuffix Exp</StartArguments>

它具有以下优点;

  • 它将其设置为调试和发布
  • 它可以运行您当前正在运行的任何版本的Visual Studio
  • 它已签入源代码管理,因此每个开发人员都不必记住如何做:)

如@MBulli在评论中所述,如果您对接受的答案进行了更改,请删除您的*.csproj.user文件,因为其中的设置将覆盖您添加到主csproj文件中的设置。


6
确保删除* .csproj.user文件,因为用户设置优先于项目设置。
MBulli

好答案,谢谢!比接受的效率高得多。
Zverev Evgeniy

vs 2019的完美表现
x0n

2

OutputWindowHelper.OutputString方法写入到“常规”输出窗玻璃(CTRL + ALT + O)。我在.csproj引用中添加了这一行以在VS 2013中获得此行

<Reference Include="Microsoft.VisualStudio.Services.Integration, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />

另请参阅此答案


注意在Visual Studio 2015中不存在OutputWindowHelper。如果仅调用VS2015,则仅VS2015的计算机将引发错误。另见github.com/landofjoe/NuspecPackager/issues/1
Quango 2015年

0

如果尝试调试UnitTestExtension,还应该将调试器附加到vstest。*。exe进程,如此处所述。否则,您可能会看到激活的断点,但调试器将永远无法找到它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.