Question

J'ai réussi à créer une classe à l'aide de CodeDom et à ajouter une seule méthode à cette classe. Maintenant, y at-il un moyen de, après avoir construit l’instance CodeCompileUnit, compiler le code et appeler la méthode générée? L'appel de la méthode doit être effectué dans le même contexte que la génération de code.

Était-ce utile?

La solution

Extrait du le blog de l'un de mes amis :

    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 pour créer une instance du type souhaité et exécuter la méthode de votre choix.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top