0

実行時にc#コードを評価する方法があるかどうか誰かが知っていますか?例えば。ユーザーがDateTime.Now.AddDays(1)などを文字列として入力し、その文字列を評価して結果を取得できるようにしたいと思います。

動的に入力されたすべての行を評価しているように見えるので、即時ウィンドウ機能にアクセスできるかどうか疑問に思います。

VBにはVBA*.dllからの文書化されていないEbExecuteLine()API関数があることがわかり、c#に相当するものがあるかどうか疑問に思います。

また、カスタムツールhttps://github.com/DavidWynne/CSharpEval(以前はkamimucode.comにありましたが、作成者はGitHubに移動しました)を見つけましたが、次のようなものが望ましいです。 .NETの一部

ありがとう

4

5 に答える 5

1

Monoにはインタラクティブなコマンドライン(csharp.exe)があります

あなたはそれがどのように魔法であるかを正確に見るためにそれのソースコードを見ることができます:

https://github.com/mono/mono/raw/master/mcs/tools/csharp/repl.cs

于 2011-04-05T08:35:45.953 に答える
1

おそらくすでに見てきたように、実行時にC#コードを評価するための組み込みのメソッドはありません。これが、あなたが言及したカスタムツールが存在する主な理由です。

また、C#コードの評価を可能にするC#評価プログラムもあります。実行時にC#コードを評価するために提供され、多くのC#ステートメントをサポートします。実際、このコードはすべての.NETプロジェクト内で使用できますが、C#構文の使用に制限されています。詳細については、私のWebサイトhttp://csharp-eval.comを参照してください。

于 2011-06-10T02:55:39.397 に答える
0

MicrosoftのC#コンパイラには、Compiler-as-a-Serviceがまだありません(C#5.0に付属している必要があります)。

MonoのREPLを使用するか、 CodeDOMを使用して独自のサービスを作成することができます

于 2011-04-05T08:38:20.613 に答える
0

高速ではありませんが、コードをその場でコンパイルできます。前の質問を参照してください。

アセンブリを取得し、型名がわかったら、リフレクションを使用してコンパイル済みクラスのインスタンスを作成し、メソッドを実行できます。

于 2011-04-05T08:38:54.327 に答える
0

O2プラットフォームのC#REPLスクリプト環境は、コードスニペットを実行できる非常に強力なリフレクションAPIを備えたFluent# APIを使用します。

例えば:

"return DateTime.Now.ToLongTimeString();".executeCodeSnippet(); 

戻ります

5:01:22 AM

"..."。executeCodeSnippet();に注意してください 。実際には、有効なC#コードスニペットを実行できます(したがって、非常に強力です)。

ユーザーが実行できる内容を制御したい場合は、ASTツリーを使用してユーザーがアクセスできるC#機能を制限できます。

また、MicrosoftのRoslynもご覧ください。これは、複数のRoslynベースのツール(すべてVisualStudioの外部でスタンドアロンで実行されている)で見られるように非常に強力です。

于 2012-08-03T04:08:24.853 に答える