Global.asax没有为Release版本触发

时间:2009-05-01 11:12:40

标签: asp.net global-asax

我们的某个应用程序有一种机制,可以在遇到特定级别的异常时自动通过电子邮件发送帮助台。一个特殊的例外,一个NullReferenceException,导致一些问题,我相信它是由IIS回收和丢失会话引起的。 为了证明这一点,我想在应用程序启动/停止/回收时记录,并在global.asax文件中添加了一些代码来执行此操作。在调试模式下运行时,日志消息被写出并且一切都很好。当我切换到Release build时会出现问题,它会触发Web部署项目构建到IIS中配置的文件夹。

当我导航到应用程序时,未调用ApplicationStart方法,因为未创建日志文件且未更新事件日志。当我重新启动IIS时,ApplicationEnd也会发生同样的情况,即不会创建日志。

为什么它适用于Debug版本但不适用于Release版本?我一直在踢这几个小时,这让我疯狂。

提前致谢

** [编辑]:我不是100%确定发生了什么,但它现在似乎正在发挥作用。我想也许我们用于日志记录的程序集可能在ApplicationStart执行时没有加载,所以我删除了所有代码,只是在方法中创建了一个文本文件。看哪,文件已经创建了!所以我添加了一个if(logger!= null)类型检查以尝试输出一些诊断但没有写出任何内容。所以我尝试了一个try / catch并写了一个空白文件“exception.txt”,如果抛出异常但仍然没有创建文件 - 尽管生成了事件日志和预期的日志文件!我糊涂了! **

5 个答案:

答案 0 :(得分:11)

我们遇到了这个问题,并且缺少 PrecompiledApp.config 文件是解决方案。如果没有它,global.asax事件不会在IIS6下使用ISAPI过滤器触发,并且 rewritten.aspx 方法记录为例如在blog.codeville.net上。我们使用msbuild在部署之前预编译站点。

当我们的构建停止工作时,我们在这个问题上抓了几个小时。事实上,在强迫性的管家模式中,我已经从源代码控制中删除了这个文件,因为我认为它是多余的。添加它以修复问题。

答案 1 :(得分:5)

如果要发布应用,请检查 PrecompiledApp.config 文件。如果从发布的站点文件夹中删除该文件,则事件将停止触发。

答案 2 :(得分:1)

我会确保在记录空引用异常时,日志记录逻辑没有遇到某种权限问题。您是否具有approprite权限来访问日志的写入位置?

答案 3 :(得分:0)

如果您需要避免 PrecompiledApp 文件并发布 Global.asax ,请转到发布并移至底部的设置标签,并在发布期间取消选中预编译

Belove图片会帮助你 enter image description here

答案 4 :(得分:0)

我们尝试了很多东西。

  1. Global.asax is not publishing and event are not firing in Global.asax
  2. Why are the Global.asax events not firing in my ASP .NET website?
  3. global.asax works on local computer but not after i publish to server
  4. Mystery of Global.asax in ASP.NET MVC application
  5. 我们还尝试将以下文件放在rootbin目录中。

    1. App_global.asax.dll App_global.asax.compiled 文件
    2. PrecompiledApp.config
    3. 没有一个有效!

      我们必须为我们的asp .net 2.0网站提供原始Global.asax而不是pre-compiled dll,以便触发全局事件。

      希望这有助于某人!干杯!快乐的编码! :d