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,使其自动连接到服务,并可以轻松地调试我的应用程序。

感谢

Visual Studio 2010自动附加到进程

为多项目启动配置解决方案。我这样做是为了类似的应用程序。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

  1. 在wcf服务项目的属性页中,选择Web选项卡
  2. 选择"启动外部程序"作为启动操作,然后选择MainUI.exe
  3. 将工作目录设置为MainUI.exe所在的文件夹(可能是bin文件夹)
  4. 设置一个断点,然后按f5开始调试

如果我理解正确,Macro可能是答案:

在Vs:中

  1. 工具->宏->录制临时宏(Ctrl+shift+r)
  2. 照常将VS附加到进程(ctrl+alt+p)
  3. 停止录制宏(ctrl+shift+r)
  4. 转到"视图"->"其他窗口"->"宏资源管理器"(CTRL+F8)
  5. 找到临时宏(在MyMacros->RecordingModule中的某个位置)并重命名它
  6. 现在,转到"工具"->"选项"->"键盘",找到您的宏(在"显示包含宏写入名称的命令"中)
  7. 在"按快捷键"中,将其绑定到某个快捷键(我的宏位于CTRL+SHIFT+K;)
  8. 按下OK
  9. 快乐

您是否尝试过使用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特定的,必须显式引用到要使用的项目中)