【问题标题】:Embed Global.asax in assembly在程序集中嵌入 Global.asax
【发布时间】:2016-02-13 20:49:40
【问题描述】:

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

【问题讨论】:

  • 只是出于好奇,为什么需要这个?代码隐藏自动包含在 Web 应用程序集中。谢谢。
  • 目前致力于将 ironpython 和 asp.net mvc 结合在一起。事情进展得很顺利,但我只想分发一个 dll 而没有global.asax

标签: c# asp.net-mvc global-asax


【解决方案1】:

我不确定。您是否尝试将构建操作设置为嵌入式资源?您可以通过选择 global.asax 文件来执行此操作,然后该选项应出现在您的属性窗口中。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      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()

      希望有帮助:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-03
        • 1970-01-01
        • 2014-05-04
        • 1970-01-01
        相关资源
        最近更新 更多