web-dev-qa-db-ja.com

.NETアプリケーションへのスクリプト機能の追加

私はすでに、アプリケーションにスクリプトを追加する実用的な実装を持っています。アプリケーションは現在、CodeDOMを使用して、C#スニペット(さまざまなユーザーが構成ファイルを提供します)からスクリプトを生成してアセンブリにコンパイルします。最初は良いアイデアのように聞こえたので、次の問題に遭遇しました。

  1. appDomainの処理が難しく、シリアル化の必要性
  2. パフォーマンスの問題=>スクリプトを頻繁に変更すると再コンパイルがトリガーされます
  3. 実行中にスクリプトをインプレースで変更することはできません
  4. デバッグ用のGUI(ブレークポイント)を提供するのは難しいため、スクリプトライターには実際にデバッガーが必要です...

メインのAppDomainにすべてをロードすることで、1に対するソリューションを「ハッキング」しました。問題は、何もアンロードできないことです...しばらくすると、メモリの使用量が膨大になります。

このため、最終的にはインタープリター型ソリューションに切り替えることを検討しますが、既存のコードベースのためにC#言語に近いままにしておきたいと思います。 Vsa、S#、Script.NETなどの周りにはたくさんのライブラリがあります...スクリプトからアプリケーションのオブジェクトにアクセスし、アプリケーションのスクリプトでメソッドを実行する必要があります。また、インタープリター言語への切り替えが正しい戦略だと思いますか、それとも、スクリプトの各行の間にメソッドを呼び出して段階的に実行できるようにするなどのコードを挿入して、既存の概念にデバッグモードを追加しようとすべきでしょうか。ただし、AppDomainの処理は、処理するのが悪夢のままです。

確かに、誰かがそのような状況で走るのは初めてではありません。 CodeDOMの処理を容易にするFOSSラッパー/ヘルパーライブラリも、最小限のデバッガーのビルディングブロックを提供するGUI要素も見つかりませんでした。現在、私は独自のGUIを構築し、スクリプトで呼び出しをステップオーバーし、GUI内のアプリケーションオブジェクト(呼び出しの前後)の変更を表示しています。

FOSSソース/ライブラリのみを参照してください。

1
jdehaan

より動的であるが.NETの近縁である解釈されたオプションがいくつかあります。私は聴衆に選択を任せると思います。

  • Sys-adminの場合、PowerShellコマンドレットを公開して、使用できるようにします。彼らはあちらで快適でなければなりません、そしてそれは非常に強力で.NETフレンドリーなツールです。コメントでこれを提案してくれた@jmh_grの功績です。

  • 開発者にとっては、よく知られた言語の動的CLR実装を検討します。 IronPython が頭に浮かびます。 F#には、より公式な言語に固執したい場合に使用できるインタラクティブなスクリプトモードもあります。

  • 開発者以外の人は、Booのようなものを使用して独自のDSLを作成し、言葉遣いを理解できるようにすることを考えます。

最後に、これらの戦略はいずれも相互に排他的ではありません。いくつかの点で、それらは成功するために同じ施設の多くを必要とするので、互いに構築します。

1
Wyatt Barnett

MonoのC#シェルで機械を再利用できます。コマンドラインを実行する代わりに、C#コンパイラを含むライブラリを使用するなど、いくつかの改善を加えて行っていることを実行します...

http://www.mono-project.com/CsharpRepl

自動インポートと参照アセンブリを追加するのは非常に簡単で、ユーザーが利用できるようにします。

MIT X11またはGNU GPL)の条件の下でデュアルライセンスされています

https://github.com/mono/mono/tree/master/mcs/tools/csharp のコード

0
Monoman