【发布时间】:2019-12-07 06:05:44
【问题描述】:
我继承了大约 10 年前构建的 ASP.NET Web 应用程序。我正在使用 VS 2019 社区。我正在尝试在 Global.asax.cs 的 Application_Start 挂钩中设置 log4net 的配置加载。经过多次故障排除后,我发现 Global.asax.cs 中的任何代码在本地调试时都没有执行。我通过尝试从 Application_Start 抛出一个从未发生过的异常来确定这一点。到目前为止,这是我按粗略顺序尝试过的:
1) 我重命名了旧的 Global 并通过 Project->Add_New_Item->Global_Application_Class 添加了一个新的。我将每个类方法设置为仅包含throw new Exception("wtf");。尽管如此,异常不会触发。 Global.asax.cs 的具体代码如下。
2) 我选中了项目/Web 设置下的“启用编辑并继续”框。还是没有变化。
3) 我确保 IIS 已停止,甚至退出/重新启动 VS 2019,并重新启动了我的计算机。清理整个项目并重建它。不过,什么都没有。
4) 我尝试将我的真实项目从“.NET Framework 4”切换到“.NET Framework 4.7.2”。它没有帮助。
5) 我从头开始创建了一个新的 Web 应用程序项目,添加了一个 Global.asax,就像我在上面 #1 中所做的那样,并且 IT WORKS 完全符合我的预期。这似乎表明我的 VS/IIS 正在工作。
由于 webapp-from-scratch 工作正常,它似乎将矛头指向了我真正的 webapp 中的某些东西。我试着四处寻找两个项目之间的差异,但空手而归。 IIS 如何知道执行全局代码?我还需要在我的项目中配置什么,以便 IIS 执行该代码吗?
2019 年 12 月 7 日更新。这是 Global.asax* 文件的代码:
<%@ Application Codebehind="Global.asax.cs" Inherits="TM.Website.Global" Language="C#" %>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;
namespace TM.Website
{
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
throw new Exception("wtf");
}
protected void Session_Start(object sender, EventArgs e)
{
throw new Exception("wtf");
}
protected void Application_BeginRequest(object sender, EventArgs e)
{
throw new Exception("wtf");
}
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
throw new Exception("wtf");
}
protected void Application_Error(object sender, EventArgs e)
{
throw new Exception("wtf");
}
protected void Session_End(object sender, EventArgs e)
{
throw new Exception("wtf");
}
protected void Application_End(object sender, EventArgs e)
{
throw new Exception("wtf");
}
}
}
【问题讨论】:
-
新类是否继承自HttpApplication?你可能只能有一个类从 HttpApplication 继承,不管它的名字是什么,所以删除旧的,不要只是重命名它
-
@GarrGodfrey 我以为就是这样,但唉,这并没有什么不同。我对整个源代码进行了检查,以确保只有一个类继承自 System.Web.HttpApplication,并且得到了确认。我还重新启动了 VS 并清理/重建了项目。
-
你能介绍一下课程吗?你确定它是公开的吗?
-
@GarrGodfrey 是的,它是公开的。我刚刚将两个 Global.asax* 文件的源代码添加到问题的末尾。
-
经过更多修改,包括通过 dotPeek 挖掘 webapp DLL,并在工作项目和损坏项目之间区分 applicationhost.config 文件,我对项目中导致我的问题的任何东西都束手无策.一时兴起,我决定使用 VS 而不是 WSL 上的 CLI git 将我的 git repo 重新克隆到一个新位置,令我惊讶的是,它现在似乎可以工作了。我将在早上我的眼睛/大脑新鲜时再试一次,以尝试缩小根本原因。
标签: asp.net