WPF C#アプリケーションでの動的コード実行
この記事は、WPF C#アプリケーション内の外部テキストファイルからコードを実行する問題に取り組んでいます。 実行するコードを含むテキストファイルは、アプリケーションの実行ディレクトリに存在します。
実装
このソリューションは、コードコンパイルと反射技術の組み合わせを活用します。 このプロセスには、テキストファイルからのコードのリアルタイムコンパイルと、コンパイルされたアセンブリからのターゲットメソッドのその後のインスタンス化と呼び出しが含まれます。
次のコードスニペットはこのアプローチを示しています:
// ... code ...
Dictionary providerOptions = new Dictionary
{
{"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);
詳細な説明
コードは、最初にテキストファイルから文字列変数( sourcode
)にC#コードを読み取ります。 csharpcodeprovider
は、指定されたコンパイラオプションで初期化されます。 compilerparameters
は、実行可能ファイルを作成せずに、メモリ内でコンパイルされたアセンブリを生成するように設定されています。 compileasesemblyfromsource
メソッドを編集します。
エラーチェックは、コンパイルプロセスに従います。コンパイルが成功した場合、[コンパイルされたクラスのインスタンスが createInstance
を使用して作成され、指定されたメソッドは getMethod
および invoke
を使用して呼び出されます。これにより、外部からロードされたコードの動的実行が可能になります。 名前空間とクラス/メソッド名は、テキストファイルのコードと一致する必要があることに注意してください。 エラー処理(例:トライキャッチブロック)は、生産環境で堅牢性のために追加する必要があります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3