本文由机器翻译。若要查看英语原文,请勾选“英语”复选框。 也可将鼠标指针移到文本上,在弹出窗口中显示英语原文。
翻译
英语

BuildProvider.GenerateCode 方法 (AssemblyBuilder)

 

为生成提供程序的虚拟路径生成源代码,并将源代码添加到指定程序集生成器。

命名空间:   System.Web.Compilation
程序集:  System.Web(位于 System.Web.dll)

public virtual void GenerateCode(
	AssemblyBuilder assemblyBuilder
)

参数

assemblyBuilder
Type: System.Web.Compilation.AssemblyBuilder

引用生成提供程序所生成的源代码的程序集生成器。

若要实现为自定义文件类型生成源代码的生成提供程序,从派生类 BuildProvider 类,并重写 GenerateCode 方法来为支持的文件类型生成源代码。

通常情况下,生成提供程序的 GenerateCode 实现会读取 VirtualPath 属性,分析内容,并将生成的源代码添加到指定 AssemblyBuilder 对象。 您可能会导致的窗体中的程序集的源代码 TextWriter 对象或在 CodeDOM 图。 若要将源代码添加到该程序集通过 TextWriter 对象,请使用 CreateCodeFile 方法。 若要将源代码在 CodeDOM 图中添加对程序集,使用 AddCodeCompileUnit 方法。

如果生成提供程序特定的编程语言生成源代码,您必须重写 CodeCompilerType 属性以返回 CompilerType 的受支持的编程语言的对象。

下面的代码示例演示一个简单的生成提供程序实现,继承自抽象 BuildProvider 基类。 生成提供程序将重写 CodeCompilerType, ,GetGeneratedType, ,和 GenerateCode 基类的成员。

using System;
using System.Collections;
using System.IO;
using System.Text;
using System.Web;
using System.Web.Compilation;
using System.CodeDom.Compiler;
using System.CodeDom;
using System.Security;
using System.Security.Permissions;

// Define a simple build provider implementation.
[PermissionSet(SecurityAction.Demand, Unrestricted = true)]
public class SampleBuildProvider : BuildProvider
{
    // Define an internal member for the compiler type.
    protected CompilerType _compilerType = null;

    public SampleBuildProvider()
    {
        _compilerType = GetDefaultCompilerTypeForLanguage("C#");
    }

    // Return the internal CompilerType member 
    // defined in this implementation.
    public override CompilerType CodeCompilerType
    {
        get { return _compilerType; }
    }


    // Define the build provider implementation of the GenerateCode method.
    public override void GenerateCode(AssemblyBuilder assemBuilder)
    {
        // Generate a code compile unit, and add it to
        // the assembly builder.

        TextWriter tw = assemBuilder.CreateCodeFile(this);
        if (tw != null)
        {
            try
            {
                // Generate the code compile unit from the virtual path.
                CodeCompileUnit compileUnit = SampleClassGenerator.BuildCompileUnitFromPath(VirtualPath);

                // Generate the source for the code compile unit, 
                // and write it to a file specified by the assembly builder.
                CodeDomProvider provider = assemBuilder.CodeDomProvider;
                provider.GenerateCodeFromCompileUnit(compileUnit, tw, null);
            }
            finally
            {
                tw.Close();
            }
        }
    }

    public override System.Type GetGeneratedType(CompilerResults results)
    {
        string typeName = SampleClassGenerator.TypeName;

        return results.CompiledAssembly.GetType(typeName);
    }
}

.NET Framework
自 2.0 起可用
返回页首
显示: