我在Application_Start()
的第一行有一个断点,但Visual Studio不会破坏它。
Visual Studio已将自己附加到IIS工作进程:
自动连接到机器'SRD00510'上的'[2092] w3wp.exe'成功。
家庭控制器中的断点确实有效。
更新
我试过了:
iisreset
aspnet_regiis -i
)答案 0 :(得分:52)
阅读您的问题,我假设您使用IIS进行调试,而不是使用Visual Studio Development Server。
在这种情况下,调试应用程序启动很棘手,因为它仅在应用程序池启动或回收时调用一次。当Visual Studio附加到进程时,Application_Start已经在运行。
诀窍是让应用程序池回收而不会杀死你所附带的进程。
执行以下操作:
这对我有用(IIS 7.5,VS2015)。
答案 1 :(得分:14)
将此行放在Application_Start()。
中Debugger.Break();
这将显示一个对话框,允许您选择调试器。您可能需要重新启动应用程序池。
答案 2 :(得分:6)
Application_Start()
仅运行一次。重启应用程序的一些事情是:
iisreset
。答案 3 :(得分:2)
我的解决方案是切换到使用'Visual Studio Development Server'来处理应用程序类(Global.asax)问题。完成后,我切换回IIS。
答案 4 :(得分:0)
我假设您通过单击Visual Studio中的“调试”按钮来加载应用程序?这就是我正在做的事情(在VS 2012中)并且看到了类似的问题。第一次按下该按钮启动应用程序并正确点击断点。但似乎在我停止调试后,应用程序本身仍在继续。因此,未来的调试尝试只会附加到现有流程 “停止调试”按钮旁边有一个“重启”按钮,所以我假设点击它至少会改变一些事情。 调试应用程序没有显示在IIS管理器中,所以我不能在那里停止它。同样,iisreset也没有抓住它。
到目前为止,我唯一想到的是更改一行代码,从而迫使visual studio触发构建,然后它会杀死现有的proc并重新开始。如果我只是想多次穿过那里,那会很烦人。
我不认为这是一个合适的“答案”,但它可能是一个有用的解决方法,直到有人真正得到答案。
答案 5 :(得分:0)
我之前通过这样做解决了这个问题:
现在打开你的解决方案并试一试。 (保持双手交叉:))
答案 6 :(得分:0)
无论何时第一次运行应用程序,或者说启动应用程序,都会有一个ASP.Net开发服务器 - 端口[端口号]启动,
Application_Start()
在申请过程中运行一次。
如果要达到断点,则必须停止ASP.Net开发服务器端口并再次运行应用程序。
答案 7 :(得分:0)
如果[2092] w3wp.exe是您所做的服务,请尝试以下操作: 停止服务 - >重建服务项目 - >开始重建服务 - >尝试调试
答案 8 :(得分:0)
如@David Perlman所述,如果不使用IISEXPRESS,我将选择Logger。 Log4Net或NLog都不错。从长远来看,最好在生产环境中使用记录器。
namespace DataService
{
using NLog;
public class Global : System.Web.HttpApplication
{
private Logger log;
protected void Application_Start(object sender, EventArgs e)
{
LogManager.LoadConfiguration("nlog.config");
log = LogManager.GetCurrentClassLogger();
log.Error($"Read this line in the log specified in nlog.config");
}