我在 的第一行有一个断点Application_Start()
,但 Visual Studio 不会中断它。
Visual Studio 已将自身附加到 IIS 工作进程:
自动附加到机器“SRD00510”上的进程“[2092] w3wp.exe”成功。
我在家庭控制器中的断点确实有效。
更新
我试过了:
iisreset
- 重新启动视觉工作室
- 重新启动。
- 尝试重新安装 aspnet (
aspnet_regiis -i
)
我在 的第一行有一个断点Application_Start()
,但 Visual Studio 不会中断它。
Visual Studio 已将自身附加到 IIS 工作进程:
自动附加到机器“SRD00510”上的进程“[2092] w3wp.exe”成功。
我在家庭控制器中的断点确实有效。
更新
我试过了:
iisreset
aspnet_regiis -i
)阅读您的问题,我假设您使用 IIS 进行调试,而不是 Visual Studio 开发服务器。
在这种情况下,调试应用程序启动很棘手,因为它只在应用程序池启动或回收时调用一次。当 Visual Studio 附加到进程时,Application_Start 已经在运行。
诀窍是让应用程序池在不终止您所附加的进程的情况下循环使用。
请执行下列操作:
这对我有用(IIS 7.5,VS2015)。
将此行放在 Application_Start() 中。
Debugger.Break();
这将显示一个对话框,允许您选择调试器。您可能需要重新启动应用程序池。
Application_Start()
仅在应用程序启动时运行一次。重新启动应用程序的一些事情是:
iisreset
在命令行运行来执行此操作。我的解决方案是切换到使用“Visual Studio 开发服务器”来处理应用程序类(Global.asax)问题。完成后,我切换回 IIS。
我假设您是通过单击 Visual Studio 中的“调试”按钮来加载应用程序的?这就是我正在做的事情(在 VS 2012 中)并看到了类似的问题。第一次按下该按钮会启动应用程序并正确命中断点。但在我停止调试应用程序本身之后,它似乎继续运行。因此,未来的调试尝试只是附加到现有进程。
“停止调试”按钮旁边有一个“重启”按钮,所以我认为点击它至少会改变一些事情。调试应用程序未显示在 IIS 管理器中,因此我无法将其停止。同样, iisreset 也没有捕捉到它。
到目前为止,我唯一想到的就是更改一行代码,从而迫使 Visual Studio 触发构建,然后它会杀死现有的 proc 并重新开始。如果我只想多次穿过那里,那有点烦人。
我不认为这是一个合适的“答案”,但它可能是一个有用的解决方法,直到有人提出真正的答案。
我之前通过这样做解决了这个问题:
现在打开您的解决方案并试一试。(保持你的手指交叉:))
每当您第一次运行应用程序,或者说启动应用程序时,都会有一个 ASP.Net 开发服务器 - 端口 [端口号] 启动,
Application_Start()
在应用程序过程中运行一次。
如果您想达到断点,您必须停止 ASP.Net 开发服务器端口并再次运行您的应用程序。
如果 [2092] w3wp.exe 是您创建的服务,请尝试以下操作:停止服务 -> 重建服务项目 -> 启动重建服务 -> 尝试调试
如果使用 IISEXPRESS 不是一种选择,正如@David Perlman 提到的那样,我会选择 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");
}