C# 如何在调试模式下在解决方案中启动另一个项目

C# 如何在调试模式下在解决方案中启动另一个项目,c#,.net,visual-studio,wcf,debugging,C#,.net,Visual Studio,Wcf,Debugging,我有一个WCF主机应用程序,它由一个带有一些动态参数的可执行文件启动 现在我想调试这个应用程序,但由于它是由另一个工具启动的,VS.NET不会在调试模式下加载它 是否可以编写一些只调试的代码来强制它在调试模式下执行这个过程,这样它就会到达断点 目前它正在使用Process.Start()来启动主机应用程序 每次都将其附加到调试器不是一个选项,我正在寻找一个更实用的解决方案。尝试在您的WCF应用程序中添加这一行: System.Diagnostics.Debugger.Launch(); 如果应

我有一个WCF主机应用程序,它由一个带有一些动态参数的可执行文件启动

现在我想调试这个应用程序,但由于它是由另一个工具启动的,VS.NET不会在调试模式下加载它

是否可以编写一些只调试的代码来强制它在调试模式下执行这个过程,这样它就会到达断点

目前它正在使用
Process.Start()
来启动主机应用程序


每次都将其附加到调试器不是一个选项,我正在寻找一个更实用的解决方案。

尝试在您的WCF应用程序中添加这一行:

System.Diagnostics.Debugger.Launch();

如果应用程序未在调试器下运行,您将看到一个窗口,询问您是否要调试应用程序。

VS.NET宏非常强大。我认为您可以非常轻松地编写附加脚本。

您可以在不修改源代码的情况下编写附加脚本。在Visual Studio中打开自动启动的项目并设置断点。启动Regedit.exe并向“HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options”添加一个与.exe名称完全相同的密钥。添加名为“Debugger”的新字符串值,将其设置为“c:\Windows\system32\vsjitdebugger.exe”。例如.reg文件:

REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ConsoleApplication1.exe]
"Debugger"="\"c:\\Windows\\system32\\vsjitdebugger.exe\""
现在,当你的应用程序启动这个过程时,JIT调试器提示符就会出现。选择加载了自动启动项目的Visual Studio实例。执行将在断点处停止。请注意,您通常必须将焦点更改回您自己


Mike Stall警告说,此技巧不适用于仅托管调试。我无法复制它,它在VS2008 SP1中工作得很好。

虽然它不加载源代码和相关项目,但它的工作方式就像附加调试器一样,这相当困难。还有,我无法选择当前的VS.NET实例进行调试,这将解决问题。您是否使用调试符号编译它们,并且它们在WCF应用程序的DLL中可用?您提到它不允许您选择当前的VS.NET实例进行调试。。。您是否在调试模式下运行当前实例?如果它处于调试模式,它应该连接到正在运行的一个…诀窍是我需要同一项目的两个实例,它不能连接到同一个VS.NET实例。+1您还可以使用gflags.exe切换此注册表设置。请参阅,请不要使用“vs.net”标记。您已经在这里呆了足够长的时间,可以了解更多。很抱歉,刚刚注意到visual studio标记现在将使用它,但您不知道。
#if debug

// Do stuff
if(!System.Diagnostics.Debugger.IsAttached)
{
System.Diagnostics.Debugger.Launch();
}
System.Diagnostics.Debugger.Break();

#endif