Visual Studio 2010自动附加到进程

16

我正在使用Visual Studio 2010,我的应用程序采用多层体系结构。

包括MainUI(用户界面),WCFService(WCF服务),BLL(业务逻辑层)和DAL(数据访问层)。

我的MainUI与WCF通信,WCF进一步与BLL和DAL通信。每当我需要调试BLL和DAL时,我都需要将WCF作为进程附加到Visual Studio中(每次都要这样做)。有什么方法可以使我免于这种麻烦呢?

如何设置Visual Studio以自动附加到服务,使我能够轻松地调试应用程序。

谢谢。


1
您是否考虑过录制宏并将其绑定到快捷键? - Strelok
这仍然是一个手动过程,每次我执行应用程序并想要调试它时都需要使用快捷方式,我想要完全自动化的东西。 - Manvinder
你是在Visual Studio中编译和运行所有这些项目吗?(包括WCFService)?因此,每次编译都要重新启动WCFService吗? - wal
1
如果对于这些问题的任何一个回答是肯定的,那么最好将您的WCF服务作为控制台应用程序运行,以便可以轻松地从Visual Studio中启动/调试。您可以修改控制台应用程序(在您回复时可以详细说明),以便它也可以轻松地作为Windows服务运行(请参见Environment.UserInteractive)。 - wal
10个回答

16

配置您的解决方案以启动多个项目。我对一个类似的应用程序进行了这样的操作。VS会自动启动WCF和客户端,我可以在任何一个中设置断点。

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

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


谢谢,这个很好用,唯一的问题是每当我运行我的应用程序时,浏览器窗口会自动启动(因为我们将wcf项目设置为启动项),有没有什么办法可以避免这种情况? - Manvinder
嗨,罗布,你能否解决最后一道难题,以便每次执行项目时都摆脱浏览器窗口的出现。 - Manvinder
1
检查WCF服务项目的项目设置:有一个选项可以选择在启动时显示什么,只需选择“无”。 - eFloh

4

示例如何启动一个进程并将其附加到Visual Studio 2010与EnvDTE(版本相关)。

//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...
    }
}

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

但是我仍然需要附加它,它不会自动附加。 - Manvinder

1

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。


0

个人而言,我更喜欢使用Debugger.Launch(),就像这个帖子中建议的那样,因为它不需要引用DTE(这是特定于IDE的,必须明确地引用到项目中才能使用)。


0

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

0

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

在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. 点击确定
  9. 开心使用

Thaven,我知道宏可以做到这一点,但每次执行应用程序时我还是不得不使用快捷方式,我不想这样做,请提供其他建议。 - Manvinder

0
你试过使用Visual Studio中自带的WCFSvcHost.EXE启动BLL和DAL服务吗?它附带了一个帮助文件,文件中描述得很明确:"Windows Communication Foundation (WCF) Service Host (wcfSvcHost.exe) 可以让你通过Visual Studio调试器(F5)自动托管和测试你实现的服务。然后你可以使用WCF Test Client (wcfTestClient.exe)或者你自己的客户端测试服务并找到并解决潜在错误。" 默认安装路径是C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE,你可以将它配置为使用你的MainUI应用程序作为客户端。同样在该目录下的WcfSvcHost.chm帮助文件中有一个关于使用自定义客户端的部分,属于Scenarios for using ECF Service Host。如果你愿意,这里是MS网站上关于使用WCF Service Host (wcfSvcHost.exe)的帮助链接:Using WCF Service Host (wcfSvcHost.exe)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接