ControlBuilderInterceptor 类
ControlBuilderInterceptor
类允许自定义或控制编译过程。
语法
internal class ControlBuilderInterceptor
警告
ControlBuilderInterceptor
类是内部类,不应直接在代码中使用。
如“备注”部分所述,可以检查此类型的存在,以确定是否存在拦截器类型支持。 Microsoft在任何情况下都不支持在生产应用程序中使用此类的任何其他用法。
言论
在 .NET Framework 2.0 和 .NET Framework 3.5 中,2020 年 8 月 更新添加了对使用拦截器类型自定义或控制编译过程的支持。 可以使用 Type.GetType() 来检查 ControlBuilderInterceptor
类型是否存在,可以确定此支持是否存在,如以下代码所示。
Type type = Type.GetType("System.Web.Compilation.ControlBuilderInterceptor, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
如果返回值为非 null,则存在拦截器支持。 如果返回值 null
,或者引发异常,则尚未安装 2020 年 8 月更新,并且缺少拦截器支持。
如果存在拦截器支持,则可以编写和注册与编译过程交互的侦听器类型,其方式与 ControlBuilderInterceptor 在更高版本的 .NET Framework 上完全相同。 在 .NET Framework 2.0 和 .NET Framework 3.5 中,拦截器类型可以是满足以下要求的任何类:
- 具有公共的无参数构造函数。
- 具有与 .NET Framework 的更高版本中存在的 PreControlBuilderInit(ControlBuilder, TemplateParser, ControlBuilder, Type, String, String, IDictionary, IDictionary) 和 OnProcessGeneratedCode(ControlBuilder, CodeCompileUnit, CodeTypeDeclaration, CodeTypeDeclaration, CodeMemberMethod, CodeMemberMethod, IDictionary) 方法相同的公共非静态方法
PreControlBuilderInit
和OnProcessGeneratedCode
。
在 ASP.NET 应用程序设置(<appSettings>
)中使用 aspnet:20ControlBuilderInterceptor
密钥注册拦截器类型。 此应用程序设置必须列在计算机或应用程序 web.config 文件中。 使用其程序集限定的类型名称指定拦截器类型。 以下示例演示如何注册名为 Fabrikam.Interceptor
的拦截器类型。
<configuration>
...
<appSettings>
...
<add key="aspnet:20ControlBuilderInterceptor"
value="Fabrikam.Interceptor, Fabrikam, Version=1.0.0.0, Culture=neutral, PublicKeyToken=2b3831f2f2b744f7" />
</appSettings>
</configuration>
若要检索类型的程序集限定名称,请使用 Type.AssemblyQualifiedName 属性,如以下代码所示。
string assemblyQualifiedName = typeof(Fabrikam.Interceptor).AssemblyQualifiedName;
如果存在拦截器支持,编译过程将按照上述方式与列出的类型进行交互。 如果缺少拦截器支持,则忽略应用程序设置,并且不起作用。
要求
命名空间: System.Web.Compilation
程序集: System.Web (System.Web.dll)
.NET Framework 版本: 3.5、2.0