2008-10-16 6 views
1

J'ai réussi à créer une classe en utilisant CodeDom et à ajouter une seule méthode à cette classe. Maintenant, est-il possible, après avoir construit l'instance CodeCompileUnit, de compiler le code et d'appeler la méthode générée? L'invocation de la méthode doit être effectuée dans le même contexte que la génération de code.Compilez et appelez une méthode générée

Répondre

5

Pris d'un friend of mine's blog:

CSharpCodeProvider codeProvider = new CSharpCodeProvider(); 
    codeProvider.GenerateCodeFromNamespace(codeNamespace, new StringWriter(), new CodeGeneratorOptions()); 

    CompilerParameters param = new CompilerParameters(assemblyReferences); 
    param.GenerateExecutable = false; 
    param.GenerateInMemory = true; 
    param.TreatWarningsAsErrors = false; 
    param.WarningLevel = 4; 

    CompilerResults results = codeProvider.CompileAssemblyFromDom(param, compileUnit); 
    Assembly assembly = results.CompiledAssembly; 

    Type[] types = assembly.GetExportedTypes(); 

Vous pouvez ensuite utiliser la réflexion sur les types de créer une instance du type que vous voulez et exécuter quelle que soit la méthode que vous voulez.

Questions connexes