Cómo compilar y ejecutar código dinámicamente usando C#
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;