Red de conocimiento informático - Material del sitio web - Cómo compilar y ejecutar código dinámicamente usando C#

Cómo compilar y ejecutar código dinámicamente usando C#

Cómo usar C# para compilar y ejecutar código dinámicamente

Antes de comenzar, familiarícese con algunas clases y sus propiedades y métodos: CSharpCodeProvider, ICodeCompiler, CompilerParameters, CompilerResults, Assembly.

I.CSharpCodeProvider

Proporciona acceso a instancias del generador de código C# y del compilador de código. Si desea generar código VB dinámicamente, puede utilizar VBCodeProvider.

CreateCompiler(): Obtiene una instancia del compilador.

II.ICodeCompiler

Define una interfaz para invocar la compilación del código fuente o utilizar el árbol CodeDOM de un compilador específico. Cada método del compilador acepta un objeto CompilerParameters que representa el compilador y devuelve un objeto CompilerResults que representa los resultados de la compilación.

CompilerAssemblyFromSource (opción CompilerParameters, fuente de cadena): establece el ensamblado compilado a partir de una cadena que contiene el código fuente utilizando el compilador especificado.

3. CompilerParameters

Indica los parámetros utilizados para llamar al compilador.

ReferencedAssemblies: Obtiene los ensamblajes a los que hace referencia el proyecto actual.

Generar archivo ejecutable: Obtiene o establece un valor que indica si se genera un archivo ejecutable. Si esta propiedad es falsa, se generará una DLL. El valor predeterminado es falso.

Generar en memoria: Obtiene o establece un valor que indica si la salida se genera en memoria.

IV.CompilerResults

Representa los resultados de la compilación devueltos por el compilador.

CompiledAssembly: Obtiene o establece el ensamblado a compilar y el tipo de ensamblado.

V.Assembly

Este es un ensamblaje (no sé cómo describirlo).

usando Microsoft.CSharp

usando System.CodeDom

usando System.CodeDom.Compiler

usando System.namespace ConsoleApplication1;

{

programa de clase pública

{

static void Main(string[] args)

{

// 1.CSharpCodePrivoder

CSharpCodeProvider objCSharpCodePrivoder = nuevo CSharpCodeProvider()

// 2.ICodeComplier

ICodeCompiler objICodeCompiler = objCSharpCodePrivoder.CreateCompiler();

// 3. CompilerParameters

CompilerParameters objCompilerParameters = new CompilerParameters();

objCompilerParameters.ReferencedAssemblies. Add("System.dll");

objCompilerParameters.GenerateExecutable = false;

// 4.

objCompilerParameters.GenerateExecutable = false;

objCompilerParameters.GenerateInMemory = true;

// 4.> CompilerResults cr = objICodeCompiler.CompileAssemblyFromSource(objCompilerParameters, GenerateCode());

if (cr.Errors.HasErrors)

{

Console.WriteLine("CompilerError: ");

foreach (CompilerError error en cr.Errors)

{

Console.WriteLine(err.ErrorText);

}

}

else

{

// Llama a la instancia de HelloWorld mediante reflexión

Ensamblaje objAssembly = cr.CompiledAssembly;