在程序集中嵌入 Global.asax

Embed Global.asax in assembly

是否可以将 Global.asax 文件嵌入到程序集中?当前,它表示为 Web 根目录中的一个文件。但我想将它作为资源存储在程序集中。

我不确定。您是否尝试过将 Build Action 设置为 Embedded Resource?您可以通过选择 global.asax 文件来做到这一点,然后该选项应该出现在您的 属性 window.

Ali Reza Dehdar的答案是正确的(只需在文件属性中将Compile更改为Embedded Resource)并且可以使用反编译器看到结果:

是的,你可以。据我所知,你有三种选择:

  1. 使用 HttpModule 但要注意它有一些棘手的部分。例如 HttpModule Init 方法可能会被触发多次(这取决于应用程序池中的应用程序实例数)
  2. 使用 OWIN
  3. 替换 HttpApplication 类型 - 这个最适合我,但我没有在太多不同的情况和框架版本中测试过它。您在程序集中唯一需要做的就是粘贴以下内容:

.

using System.Web;
using System.Web.UI;

[assembly: PreApplicationStartMethod(typeof(MyAssembly.MyHttpApplication), nameof(MyAssembly.MyHttpApplication.Application_Register)]
namespace MyAssembly
{
    public class MyHttpApplication : HttpApplication
    {
        public static void Application_Register()
        {
            PageParser.DefaultApplicationBaseType = typeof(MyHttpApplication);
        }

        protected void Application_Start()
        {
            // TODO: Your application startup magic :)
        }

        protected void Application_BeginRequest(object sender, EventArgs e)
        {
            // TODO: 
        }
    }
}

跟踪(或类似的东西):

  1. System.Web.UI.PageParser.DefaultApplicationBaseType
  2. System.Web.Compilation.BuildManager.GetGlobalAsaxType()
  3. System.Web.HttpApplicationFactory.CompileApplication()

希望对您有所帮助:)