2

私は C# で IRC ボットを作成しています。プラグインをロードする機能が必要です。たとえば、コードを含むテキスト ファイルがあり、プログラムはそのテキスト ファイルの内容をインポートします。 AS CODE...関数に...これはどのように可能ですか?

4

5 に答える 5

2

私はMUD サーバーに対して同じことをしています。このサーバーには、コンパイルされたプラグインと、使用したいコード プラグインの両方があります。CodeDom を使用して独自のスクリプト エンジンを作成しましたが、これはかなり面倒でした。最終的にCS-Scriptに切り替えました。そのため、コンパイル済みプラグインにはMEFを使用し、コード プラグインには CS-Script を使用しています。

于 2009-08-12T01:31:53.730 に答える
1

I suggest either using C#-script or some DLR language like IronPython (I'd prefer the latter). But, as others pointed out, it is unsafe to run any code that your program recieves - a more wise idea would be to define a contract interface, and accept the plugins (implementing that interface) in signed assemblies.

于 2009-08-12T01:30:31.517 に答える
0

CSharpCodeProviderクラスを調べてみてください。この質問にはいくつかのサンプルコードがあります。

これ以外に、dllをプリコンパイルし、実行時バインディングを使用してそれらをロードするオプションがあります。

これ以外に、Luaのようなスクリプトエンジンをプログラムに埋め込むことができます。

簡単に言えば、利用可能なあらゆる種類のオプションがあります。それは、どのソリューションが最適であるかについて、達成しようとしていることによって異なります。

最初の2つの例では、インターフェイスプログラミングを見て、コンパイルできる2番目のdllでインターフェイスを定義し、リフレクションを介してアセンブリから事前に定義された名前を引き出し、それを変数に割り当てます。インターフェイスタイプのとそれに対して呼び出しを行います。

私はLuaを使ったことがありませんが、リンクした記事でもその使い方を説明しているはずです。

于 2009-08-12T01:19:38.160 に答える
0

動的なコードコンパイルを探す必要があります(http://www.west-wind.com/presentations/dynamicCode/DynamicCode.htm、http://www.codeguru.com/csharp/csharp/cs_misc/designtechniques/articleを参照してください) 。 php / c10729 /、http://www.codeproject.com/KB/cs/Dynamic_Code_Generation.aspx

代わりに、リフレクションを介してプラグインをDLLとしてロードする方が良いと思いませんか?動的コードは署名されないため、コードが信頼できるソースからのものであることを確認する方法がなく、プログラムのユーザーを非常に悪意のあるコードにさらす可能性があります。

于 2009-08-12T01:20:01.937 に答える
0

助けてくれてありがとう、しかしインポートされたコードとメインコードの間でコードを共有しようとしています、例えば、テキストファイルがあり、メインプログラムのロード時に、それはそのテキストファイルを開いて関数としてロードします...パブリック文字列やintなどのコードを共有し、他の関数をアクティブにしてコマンドを使用したり、オブジェクトなどを使用したりできる関数...これは可能ですか?

于 2009-08-12T18:00:56.750 に答える