C# Visual Studio 2010自动附加到进程
我使用的是visual studio 2010,我的应用程序有一个多U层架构 MainUI、WCFService、BLL和DAL 我的MainUI与WCF通信,WCF进一步与BLL和DAL通信,每当我需要调试BLL和DAL时,我首先需要在Visual studio中将WCF作为一个进程附加(每次)。我怎样才能摆脱这场麻烦呢 如何设置VisualStudio,使其能够自动连接到服务,并且可以轻松调试应用程序C# Visual Studio 2010自动附加到进程,c#,wcf,visual-studio-2010,C#,Wcf,Visual Studio 2010,我使用的是visual studio 2010,我的应用程序有一个多U层架构 MainUI、WCFService、BLL和DAL 我的MainUI与WCF通信,WCF进一步与BLL和DAL通信,每当我需要调试BLL和DAL时,我首先需要在Visual studio中将WCF作为一个进程附加(每次)。我怎样才能摆脱这场麻烦呢 如何设置VisualStudio,使其能够自动连接到服务,并且可以轻松调试应用程序 感谢您尝试在代码中使用System.Diagnostics.Debugger.Break(
感谢您尝试在代码中使用System.Diagnostics.Debugger.Break()。如果未附加调试器,则运行该代码将要求附加调试器,您可以选择现有实例
如果我理解正确,宏可能是答案: 在Vs中:
您是否在希望调试器附加到的服务中尝试了
System.Diagnostics.Debugger.Launch()
为多项目启动配置解决方案。我为类似的应用程序执行此操作。VS会自动启动WCF和客户端,并且我可以在其中设置断点 启动顺序是选择项目的顺序
<鼠标右键单击您的解决方案并选择“选择启动项目”。然后选择多个启动项目并选择项目。 < P>您是否尝试使用VisualStudio附带的WCFSvcHost.EXE启动BLL和DAL服务?有一个帮助文件。帮助文件说明它最好,“Windows通信基金会”。(WCF)服务主机(wcfSvcHost.exe)允许您启动Visual Studio调试器(F5)以自动承载和测试已实现的服务。然后,您可以使用WCF测试客户端(wcfTestClient.exe)或您自己的客户端测试该服务,以查找和修复任何潜在错误。"默认安装为C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE。您可以将其配置为将您的MainUI应用程序用作客户端。同一目录中的帮助文件WcfSvcHost.chm有一个部分,用于在使用ECF服务主机的方案下使用自定义客户端。如果您愿意,请单击此处,以链接MS网站上的帮助:。 示例如何启动流程并使用EnvDTE将其附加到VisualStudio2010(版本相关)
//c:\ProgramFiles(x86)\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblys\EnvDTE.dll
使用Process=EnvDTE.Process;
System.Diagnostics.Process p=新的System.Diagnostics.Process();
p、 StartInfo.FileName=System.AppDomain.CurrentDomain.BaseDirectory+@“\YourProcess.exe”;
//开始这个过程
p、 Start();
//等待进程初始化
系统线程线程睡眠(1000);
bool-attached=false;
//没有找到更好的解决方案(因为它不是超级可靠的)
对于(int i=0;i<5;i++)
{
如有(附件)
{
打破
}
尝试
{
EnvDTE.DTE dte2=(EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject(“VisualStudio.DTE.10.0”);
EnvDTE.Debugger调试器=dte2.Debugger;
foreach(debugger.localprocesss中的进程程序)
{
if(program.Name.Contains(“YouProcess.exe”))
{
program.Attach();
附加=正确;
}
}
}
捕获(例外情况除外)
{
//句柄执行选项。。。
}
}
如果这是针对自托管WCF windows服务的,则需要将WCF服务主机配置为在控制台中运行或作为windows服务运行。打开“在控制台中运行”后,可以从visual studio开始调试
创建名为“RunInCole”的应用程序设置。在服务主机启动方法中,具有以下代码:
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 ());
}
}
公共类MyWindowsService:ServiceBase
{
公共静态void Main(字符串[]args)
{
//如果配置要求在控制台中运行,请在控制台应用程序中运行该服务。否则,请使用windows
//服务到主机应用程序
如果(ConfigurationManager.AppSettings[“RunIncole”]=“true”)
{
使用(ServiceHost主机=新ServiceHost(typeof(MyService)))
{
host.Open();
WriteLine(“按下以终止主机应用程序”);
Console.ReadLine();
}
}
其他的
Run(新的MyWindowsService());
}
}
在您部署到的所有环境中,您总是将此配置设置设置为false,否则服务将无法启动,但在本地调试时,您会将其设置为true。这里有一篇文章解释了如何执行此操作……您可以自定义此宏
就我个人而言,我更喜欢按照这里的建议使用
,因为它不需要引用DTE(这是特定于IDE的,必须显式引用到要使用的项目中)但我仍然必须附加它,它不会自动附加您是否考虑过录制宏并将其绑定到快捷方式?这仍然是一个手动过程,每次我执行应用程序并想要调试它时都要使用快捷方式,这是一个复杂的过程
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 ());
}
}