コードフラグメントのダイナミックコンパイルと実行
質問:
ファイルまたは入力ストリームに保存されているC#コードフラグメントを動的にコンパイルして実行できますか?
回答: もちろん! C#およびその他の静的.NET言語では、CODEDOM(コードドキュメントオブジェクトモデル)がこのようなタスクに最適なソリューションです。また、動的構築コードセグメントまたはクラス全体として使用することもできます。 実装:
動的なコンピレーションを実現するには、csharpcodeproviderクラスを使用します。次の例:
実行:
コンパイルされたコードを実行するには、反射ダイナミックロードアセンブリを使用します。
<code class="language-csharp">using System; using System.Collections.Generic; using Microsoft.CSharp; using System.CodeDom.Compiler; public class Program { public static void Main(string[] args) { // 创建C#代码提供程序 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; public 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); } } }" ); // 处理任何错误 foreach (CompilerError error in results.Errors) { Console.WriteLine(error.ErrorText); } } }</code>
Codedomを使用することにより、C#Code Fragmentを動的にコンパイルして実行して、プログラミングニーズに強力かつ普遍的なソリューションを提供できます。
はプロジェクト出力ディレクトリに作成されることに注意してください。 このコードは、すべての偶数を1〜100に印刷します。
以上がC#コードフラグメントは、ファイルまたはストリームから動的にコンパイルおよび実行できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。