WPF C# アプリケーションでの動的コード実行
この記事では、WPF C# アプリケーション内の外部テキスト ファイルからコードを実行する問題に取り組みます。 実行されるコードを含むテキスト ファイルは、アプリケーションの実行ディレクトリに存在します。
実装
このソリューションは、コードのコンパイルとリフレクション技術を組み合わせて利用します。 このプロセスには、テキスト ファイルからのコードのリアルタイム コンパイルと、その後のインスタンス化と、コンパイルされたアセンブリからのターゲット メソッドの呼び出しが含まれます。
次のコード スニペットは、このアプローチを示しています。
<code class="language-csharp">// ... code ... Dictionary<string, string> providerOptions = new Dictionary<string, string> { {"CompilerVersion", "v3.5"} }; CSharpCodeProvider provider = new CSharpCodeProvider(providerOptions); CompilerParameters compilerParams = new CompilerParameters { GenerateInMemory = true, GenerateExecutable = false }; CompilerResults results = provider.CompileAssemblyFromSource(compilerParams, sourceCode); if (results.Errors.Count > 0) throw new Exception("Compilation failed!"); object instance = results.CompiledAssembly.CreateInstance("Foo.Bar"); // Assuming the class is named "Bar" in the "Foo" namespace MethodInfo method = instance.GetType().GetMethod("SayHello"); // Assuming the method is named "SayHello" method.Invoke(instance, null);</code>
詳しい説明
コードはまず C# コードをテキスト ファイルから文字列変数 (sourceCode
) に読み取ります。 CSharpCodeProvider
は、指定されたコンパイラ オプションで初期化されます。 CompilerParameters
は、実行可能ファイルを作成せずに、コンパイルされたアセンブリをメモリ内に生成するように設定されています。次に、CompileAssemblyFromSource
メソッドがコンパイルを実行します。
エラーチェックはコンパイルプロセスの後に行われます。コンパイルが成功すると、コンパイルされたクラスのインスタンスが CreateInstance
を使用して作成され、指定されたメソッドが GetMethod
と Invoke
を使用して呼び出されます。これにより、外部からロードされたコードの動的実行が可能になります。 名前空間およびクラス/メソッド名は、テキスト ファイル内のコードと一致する必要があることに注意してください。 本番環境での堅牢性を確保するには、エラー処理 (try-catch ブロックなど) を追加する必要があります。
以上がWPF C# アプリケーションでテキスト ファイルからコードを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。