我正在使用visual studio 2010,我的应用程序有一个multiu层架构师,
MainUI,WCFService,BLL和DAL
我的MainUI与WCF通信,WCF进一步与BLL和DAL通信,每当我需要调试BLL和DAL时,我首先需要将WCF作为Visual Studio中的进程附加(每次)。我怎么能从这个麻烦中拯救自己。
我如何以自动附加到服务的方式设置visual studio,我可以轻松地调试我的应用程序。
由于
答案 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)
答案 5 :(得分:0)
如果我理解正确,Macro可能会回答:
在Vs中:
答案 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)
这是一篇被扣留的文章,解释了如何执行此操作...您可以自定义此宏。
答案 9 :(得分:0)
我个人更喜欢按照此处的建议使用Debugger.Launch() in this thread,因为它不需要引用DTE(这是特定于IDE的,必须明确引用到要使用的项目中)