これは実用的なものではありませんが、C#でプログラムコードとして文字列を実行する方法はありますか?例えばプログラムコードを文字列として
:
代わりに書き込み
Console.WriteLine("blah blah blah");
の私は、私はこれをやって考えることができる唯一の方法は、実行時にコードをコンパイルしている
string s = "Console.WriteLine(\"blah blah blah\")"
execute(s);
これは実用的なものではありませんが、C#でプログラムコードとして文字列を実行する方法はありますか?例えばプログラムコードを文字列として
:
代わりに書き込み
Console.WriteLine("blah blah blah");
の私は、私はこれをやって考えることができる唯一の方法は、実行時にコードをコンパイルしている
string s = "Console.WriteLine(\"blah blah blah\")"
execute(s);
Microsoft.CSharp.CSharpCodeProviderを使用してこれを行うことができます。
チェックthis。
のようなものを書きたいと思います。ここでは、これを行う方法を説明する記事です。http://simeonpilgrim.com/blog/2007/12/04/compiling-and-running-code-at-runtime/
これはCodeDOMを使用して行うことができます。 MSDNのUsing the CodeDOMを参照してください。
文字列にプログラムの言語は書かれていませんが、あなたが求めているのは正確ではありませんが、IronPythonは非常にクールです:、http://blogs.msdn.com/b/abhinaba/archive/2006/02/09/528416.aspxです。 Is it possible to dynamically compile and execute C# code fragments?が
それは、C#で可能であるが、それは意図的に困難次のとおりです。
はまた、(ボカは、すでに述べたように)ランタイムのコンパイルには、あまりにも、うまくいきました。すぐに使用できる簡単な「exec()」関数はありません。
AFAIKこれは、のデザインでです。エグゼクティブ・ファンクションは、その力を持ってはいけないことが多いユーザに、その言語の力を最大限に発揮させるため、大きな穴が開いている。プログラマは、ユーザーが単純な数式や文字列式を入力できるようにするためにexec()関数を使用することが多く、突然、ハッカーがSystem.Net.WebClientをインスタンス化して何かをダウンロードして実行するようになりますはるかに悪意のある人。許可されるアセンブリを制限する方法はありません。
.Net言語での好ましい選択肢は、Domain Specific Language (DSL)と呼ばれるものです。 DSLは、ベースクラスライブラリ全体へのアクセスをセキュリティに与えることなく、ユーザが許可したいものについて、独自の文法(およびその意味)を定義する(比較的)簡単な方法です。また、特別な操作を他の方法で利用できるよりも高いレベルで提供できるという利点もあります。
[動的コード生成](http://stackoverflow.com/questions/1748149/dynamic-code-generation)の複製可能 –