
在使用 VS2005 或 VS2008 设计系统并且加入了全局控制文件 Global.asax 的话,VS2003 以上的版本都是默认没有 Global.asax.cs 文件的!也就是说,只能把处理代码直接写进 Global.asax 文件里,而不再提供后台代码库。可是这样做的话,在虚拟窗口或开源的情况下运行是没问题的,但是在编译之后问题就来了,而且弄得人很头疼。
- 编译之后 Global.asax 文件就不存在了,我猜测是在 VS 进行编译的时候将 Global.asax 里的代码一并编译进 App_Code 里了(只是猜测,如有人可以告诉我正确答案我将感激不尽)。
- 消失 Global.asax 的编译后的系统出错。轻则不执行预定内容,重则直接不能运行。
那,有没有解决办法呢?这里告诉大家。其实这个答案是我在网上找的,不过具体出处不记得了。
首先,在编译前在 App_Code 里增加一个最好是带命名空间的 Global.asax.cs 文件,然后,将 public class Global 改为基于 HttpApplication 的类型。
C#代码
- public class Global : HttpApplication
- {
- public Global()
- {
- //
- // TODO: Add constructor logic here
- //
- }
- }
最后,将 Global.asax 本身的各个过程就可以写进去了。而在前台的 Global.asax 文件则只要写上 <%@ Application Inherits="名字空间.Global" Language="C#" %>。为了以防错误,最好在编译之后将原本的 Global.asax 文件的程序集名字加上去(虽然不加也行)。
这就是完整的解决方法。
PS:微软老搞一些让人头疼的问题出来……
再PS:Finesl 目前可以脱离 ISAPI_Rewrite 的束缚来进行文件名形式的重写了(暂不支持目录形式)。
也不能排除这个是他们暂时没法解决的技术问题~理解一下吧。能将就用就可以了~