質問

CodeDomを使用してクラスを作成し、そのクラスに単一のメソッドを追加しました。さて、CodeCompileUnitインスタンスを構築し、コードをコンパイルして生成されたメソッドを呼び出す方法はありますか?メソッドの呼び出しは、コード生成と同じコンテキストで実行する必要があります。

役に立ちましたか?

解決

私の友人のブログから取得:

    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();

その後、型のリフレクションを使用して、必要な型のインスタンスを作成し、必要なメソッドを実行できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top