この記事では、テキストファイルまたは入力ストリームからC#コードフラグメントを動的にコンパイルおよび実行する方法を紹介します。この関数を達成するには、C#および.NET言語でコードドキュメントオブジェクトモデル(CODEDOM)を使用することをお勧めします。
Codedomを使用すると、コードをオブジェクトとして操作し、コンパイラを使用してコードを動的にコンパイルできます。次のコードフラグメントには、この方法が示されていますこの例では、動的コンピレーションコードに
およびが使用されています。コンパイルエラーがない場合は、コンパイルされたプログラムセットを動的にロードし、その
メソッドを呼び出します。 結果をより完全に表示するために、サンプルコードは印刷された人形の結果に変更されています。using System.CodeDom.Compiler; using Microsoft.CSharp; using System.Reflection; using System.Collections.Generic; using System.Linq; class Program { static void Main(string[] args) { var csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } }); var parameters = new CompilerParameters(new[] { "mscorlib.dll", "System.Core.dll" }, "foo.exe", true); parameters.GenerateExecutable = true; CompilerResults results = csc.CompileAssemblyFromSource(parameters, @"using System.Linq; class Program { public static void Main(string[] args) { var q = from i in Enumerable.Range(1,100) where i % 2 == 0 select i; foreach(var item in q) { Console.WriteLine(item); } } }"); // 检查错误 results.Errors.Cast<CompilerError>().ToList().ForEach(error => Console.WriteLine(error.ErrorText)); // 动态加载并执行已编译的程序集 if (results.Errors.Count == 0) { Assembly assembly = results.CompiledAssembly; var type = assembly.GetTypes()[0]; var method = type.GetMethod("Main"); method.Invoke(null, new object[] { new string[] { } }); } } }
このメソッドは、C#コードフラグメントの動的なコンパイルと実行のための柔軟で一般的なソリューションを提供し、スクリプト実行や動的コード生成などのさまざまなシナリオを実現できます。 CompilationParameters
以上がC#コードフラグメントを動的にコンパイルして実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。