ASP.NET学习社区

首页 » ASP.NET学习区 » 经典项目学习 » Discuz!NT 从web.config开始(转载)
asp.net - 2008-7-5 7:20:00
粗粗地翻了1次代码,发觉asp.net这层用了大量的技巧,现在从web.config开始,一点点把它掀出来。

从上往下看,有3个地方值得考究

1.
    <compilation debug="true" defaultLanguage="c#">
      <compilers>
        <compiler language="c#" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"
          compilerOptions="/d:DEBUG;TRACE /unsafe+" />
      </compilers>
      <assemblies>
        <add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
        <add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
      </assemblies>
    </compilation>

Microsoft.CSharp.CSharpCodeProvider 提供对 C# 代码生成器和代码编译器的实例的访问。
迷惑1:Discuz加入"CSharpCodeProvider "有什么用?动态编译?它“模块”功能用到?
迷惑2:动态编译时的代码还要对c#指针提供支持?“/unsafe+”
迷惑3:System.Windows.Forms 是WinForm窗体的程序集,怎么在WebForm开发中都使用到了?
上述3点有朋友了解吗?


2.
    <httpModules>
      <add type="Discuz.Forum.HttpModule, Discuz.Forum" name="HttpModule"/>
    </httpModules>
Http模块,用来处理html转aspx,Discuz.Forum.HttpModule实现了IHttpModule接口。
在该接口的Init方法中,Discuz注册了BeginRequest事件,从而能使请求html转发到aspx上去

3.
<xhtmlConformance mode="Legacy"/>
google了一下,一下来自Scott文章

默认情况下,xhtmlConformance 设置为值 transitional。
但是,还可以将该选项设置为值 strict 或 legacy。

如果将 xhtmlConformance 选项设置为 strict,那么标准的 ASP.NET 控件将不会再呈现某些属性。例如,ASP.NET <form> 控件将不再呈现 name 属性。除非 ASP.NET 页包含(不符合标准的)客户端脚本,否则从 transitional 模式切换到 strict 模式时,不会注意到任何变化。 如果将 xhtmlConformance 选项设置为 legacy,那么对于某些元素和属性(但不是全部),ASP.NET 框架将恢复为 ASP.NET 1.1 呈现行为。在这种情况下,ASP.NET 框架将呈现不与任何 XHTML 标准兼容的内容,并且页将不再通过 XHTML 标准验证。例如,在 legacy 模式下,呈现 <br/> 标记时不会呈现它需要的 XHTML 结束斜杠 (<br />)。只有在将现有 ASP.NET 1.1 应用程序迁移到 ASP.NET 2.0 的过程中遇到问题时,将 xhtmlConformance 设置为 legacy 模式才是有意义的。

从一些标记标记中发现Discuz!NT 2.0的代码是同时支持.net 1.1的。


config文件分析到这里。

from:http://chenjiabin.spaces.live.co ... 44DA6B188!264.entry
1
查看完整版本: Discuz!NT 从web.config开始(转载)