粗粗地翻了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