Visual Studio 2010自动附加到进程

时间:2012-01-27 07:12:59

标签: c# wcf visual-studio-2010

我正在使用visual studio 2010,我的应用程序有一个multiu层架构师,

MainUI,WCFService,BLL和DAL

我的MainUI与WCF通信,WCF进一步与BLL和DAL通信,每当我需要调试BLL和DAL时,我首先需要将WCF作为Visual Studio中的进程附加(每次)。我怎么能从这个麻烦中拯救自己。

我如何以自动附加到服务的方式设置visual studio,我可以轻松地调试我的应用程序。

由于

10 个答案:

答案 0 :(得分:16)

为多项目启动配置解决方案。我这样做是为了类似的应用程序。 VS自动启动WCF和客户端,我可以在其中设置断点。

启动顺序是您选择项目的顺序。

右键单击您的解决方案,然后选择“选择启动项目”。然后选择多个启动项目并选择项目。

答案 1 :(得分:4)

示例如何启动进程并使用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...
    }
}

答案 2 :(得分:1)

尝试在代码中使用System.Diagnostics.Debugger.Break()。如果未附加调试器,则运行该代码将要求附加调试器,您可以选择现有实例。

答案 3 :(得分:1)

您是否在服务中尝试了System.Diagnostics.Debugger.Launch(),您希望调试程序附加到哪个? http://msdn.microsoft.com/en-us/library/system.diagnostics.debugger.launch.aspx

答案 4 :(得分:0)

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

答案 5 :(得分:0)

如果我理解正确,Macro可能会回答:

在Vs中:

  1. 工具 - &gt;宏 - &gt;记录TemporarilyMacro(Ctrl + shift + r)
  2. 将VS连接到正常处理(ctrl + alt + p)
  3. 停止录制宏(ctrl + shift + r)
  4. 转到View-&gt;其他Windows-&gt; Macro Explorer(CTRL + F8)
  5. 找到你的临时宏(MyMacros-> RecordingModule中的某处)并重命名
  6. 现在,转到工具 - &gt;选项 - &gt;键盘并找到您的宏(在&#34;显示命令中包含您的宏的写名称)
  7. in&#34;按快捷键&#34;将它绑定到某个键快捷键(我在CTRL + SHIFT + K中有我的宏;))
  8. 按“确定”
  9. 快乐

答案 6 :(得分:0)

您是否尝试使用Visual Studio附带的WCFSvcHost.EXE来启动BLL和DAL服务?有一个帮助文件。帮助文件最好说明,“Windows Communication Foundation(WCF)服务主机(wcfSvcHost.exe)允许您启动Visual Studio调试器(F5)以自动托管和测试您已实现的服务。然后您可以使用WCF测试客户端(wcfTestClient.exe)或您自己的客户端,用于查找和修复任何潜在错误。“默认安装是C:\ Program Files \ Microsoft Visual Studio 10.0 \ Common7 \ IDE。您可以将其配置为使用MainUI应用程序作为客户端。同一目录中的帮助文件WcfSvcHost.chm有一个部分,用于在使用ECF服务主机的方案下使用自定义客户端。如果您在此处是MS网站上的帮助链接:Using WCF Service Host (wcfSvcHost.exe)

答案 7 :(得分:0)

如果这是针对自托管的WCF Windows服务,则需要使WCF服务主机可配置为在控制台中运行或作为Windows服务运行。当您在控制台中运行时,您可以从visual studio开始调试。

创建名为“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。

答案 8 :(得分:0)

这是一篇被扣留的文章,解释了如何执行此操作...您可以自定义此宏。

http://sivablogz.wordpress.com/2013/04/08/running-an-application-and-attaching-to-the-process-with-a-macro-in-visual-studio/

答案 9 :(得分:0)

我个人更喜欢按照此处的建议使用Debugger.Launch() in this thread,因为它不需要引用DTE(这是特定于IDE的,必须明确引用到要使用的项目中)