Visual Studio 2010自动附加到进程
本文关键字:进程 Studio 2010 Visual | 更新日期: 2023-09-27 18:21:30
我使用的是visualstudio2010,我的应用程序有一个多u层架构师
MainUI、WCFService、BLL和DAL
我的MainUI与WCF通信,WCF进一步与BLL和DAL通信,每当我需要调试BLL和DAL时,我首先需要在Visual studio中将WCF作为一个进程附加(每次)。我怎么能把自己从这种麻烦中拯救出来呢。
我如何设置visualstudio,使其自动连接到服务,并可以轻松地调试我的应用程序。
感谢
为多项目启动配置解决方案。我这样做是为了类似的应用程序。VS自动启动WCF和客户端,我可以在其中任意一个中设置断点。
启动顺序是您选择项目的顺序。
用鼠标右键单击您的解决方案,然后选择"选择启动项目"。然后选择多个启动项目并选择项目。
示例如何启动进程并使用EnvDTE将其附加到Visual Studio 2010(版本相关)。
//c:'Program Files (x86)'Microsoft Visual Studio 10.0'Common7'IDE'PublicAssemblies'EnvDTE.dll
using Process = EnvDTE.Process;
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = System.AppDomain.CurrentDomain.BaseDirectory + @"'YourProcess.exe";
//Start the process
p.Start();
//Wait for process init
System.Threading.Thread.Sleep(1000);
bool attached = false;
//did not find a better solution for this(since it's not super reliable)
for (int i = 0; i < 5; i++)
{
if (attached)
{
break;
}
try
{
EnvDTE.DTE dte2 = (EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.10.0");
EnvDTE.Debugger debugger = dte2.Debugger;
foreach (Process program in debugger.LocalProcesses)
{
if (program.Name.Contains("YouProcess.exe"))
{
program.Attach();
attached = true;
}
}
}
catch (Exception ex)
{
//handle execption...
}
}
尝试在代码中使用System.Diagnostics.Degger.Break()。如果未附加调试器,则运行该代码将要求附加调试器,并且您可以选择现有实例。
您是否在希望调试器附加到的服务中尝试过System.Diagnostics.Debugger.Launch()
http://msdn.microsoft.com/en-us/library/system.diagnostics.debugger.launch.aspx
- 在wcf服务项目的属性页中,选择Web选项卡
- 选择"启动外部程序"作为启动操作,然后选择MainUI.exe
- 将工作目录设置为MainUI.exe所在的文件夹(可能是bin文件夹)
- 设置一个断点,然后按f5开始调试
如果我理解正确,Macro可能是答案:
在Vs:中
- 工具->宏->录制临时宏(Ctrl+shift+r)
- 照常将VS附加到进程(ctrl+alt+p)
- 停止录制宏(ctrl+shift+r)
- 转到"视图"->"其他窗口"->"宏资源管理器"(CTRL+F8)
- 找到临时宏(在MyMacros->RecordingModule中的某个位置)并重命名它
- 现在,转到"工具"->"选项"->"键盘",找到您的宏(在"显示包含宏写入名称的命令"中)
- 在"按快捷键"中,将其绑定到某个快捷键(我的宏位于CTRL+SHIFT+K;)
- 按下OK
- 快乐
您是否尝试过使用Visual Studio附带的WCFSvcHost.EXE来启动BLL和DAL服务?它有一个帮助文件。该帮助文件最好说明:"Windows Communication Foundation(WCF)Service Host(wcfSvcHost.exe)允许您启动Visual Studio调试器(F5),以自动主持和测试您已实现的服务。然后,您可以使用WCF测试客户端(wcfTestClient.exe)或您自己的客户端测试该服务,以查找并修复任何潜在的错误。"默认安装是C:''Program Files''Microsoft Visual Studio 10.0''Common7''IDE。您可以将其配置为使用MainUI应用程序作为客户端。同一目录中的帮助文件WcfSvcHost.chm在"使用ECF服务主机的方案"下有一个用于使用自定义客户端的部分。如果您愿意,这里有MS网站上的帮助链接:使用WCF服务主机(WcfSvcHost.exe).
如果这是针对自托管WCF窗口服务,则需要将WCF服务主机配置为在控制台中运行或作为窗口服务运行。当您打开了在控制台中运行时,您可以从visualstudio开始调试。
创建一个名为"RunInConsole"的应用程序设置。在您的服务主机启动方法中,有以下代码:
public class MyWindowsService : ServiceBase
{
public static void Main(string[] args)
{
// if configuration says to run in the console, run the service in a console app. otherwise, use windows
// service to host application
if (ConfigurationManager.AppSettings["RunInConsole"] == "true")
{
using (ServiceHost host = new ServiceHost(typeof(MyService)))
{
host.Open();
Console.WriteLine("Press <Enter> to terminate the Host application.");
Console.ReadLine();
}
}
else
ServiceBase.Run(new MyWindowsService ());
}
}
在您部署到的所有环境中,您总是将此配置设置设置为false,否则服务将无法启动,但在本地调试时,您会将其设置为true。
这里有一篇被扣留的文章,解释了如何做到这一点。。。您可以自定义此宏。
http://sivablogz.wordpress.com/2013/04/08/running-an-application-and-attaching-to-the-process-with-a-macro-in-visual-studio/
就我个人而言,我更喜欢使用这里建议的Debugger.Launch()在这个线程中,因为它不需要引用DTE(这是IDE特定的,必须显式引用到要使用的项目中)