2012-04-04 15 views
0

インターシステムズのキャッシュコードでは、インダイレクションを使用して文字列を取得し、その文字列変数の前に "@"を付けることで、実際の実行可能コードにすることができます。これはC#.NETまたはVB.NETコードで行うことができますか?だから私は、コードの1行または複数行の引数の配列を取るメソッドを持って、それがもちろん例外をスローしないと仮定して、そのコードを実行したいと思います。私はこれとどこに行くのですか?私は、.NETコード内にコンパイラを作成しようとしています。.NETでコード間接参照を実行できますか?

SET x="set a=3" XECUTE x ; sets the public variable a to 3 

OR 

SET x="tag1" d @x ; do/call the public subroutine tag1 

OR 

Set Y = "B",@Y = 6 ; sets public variable B = 6 
+2

Roslynを見てください。http://msdn.microsoft.com/en-us/roslyn – cordialgerm

+0

私は間違ったCachéが間接指定のようにあなたが選んだものが好きです。あなたはヘルスケア会社の仕事をしましたか? –

+0

ハハ!ええ、私はEpicで5.5年間働いていました。君も? – MacGyver

答えて

1

実行時にコンパイルするとします。
System.CodeDomおよびSystem.CodeDom.Complierの名前空間には、実行時のコンパイルに関連するインターフェイスが含まれています。
独自の言語の場合、派生クラスをCodeDomProviderの派生クラスから実装する必要があります。

+0

Cool!これは、コマンドラインからcsc *を呼び出すのと同じですか?または、.NETコード内からmsbuild * .sln ..を実行しますか? – MacGyver

+1

これはスクリプトです。これは実行時のコンパイルです。
cscは、コンパイル時のネイティブコンパイルを意味します。 – weismat

+0

この名前空間を使用している評判の良い例については、任意の参照/リンクをお勧めしますか?私はその間に一緒に遊んでいきます。 – MacGyver

1

.NETの場合、基本的に中級言語のラッパーであるSystem.CodeDomを使用してコードをプログラムで構築することも、System.CodeDom.Compilerを使用して文字列(またはファイル)をコンパイルするオブジェクトを取得することもできますC#またはVB.NETコンパイラを使用する実行可能ファイルまたはDLL

文字列をコンパイルするのは、Intersystems Cacheのやり方とよく似ていますが、コンパイラが必要とするすべての情報を提供する必要があるため、さらに多くの作業が必要です。 the CompilerParameters classを見ると、複雑さが増しています。コンパイルされたコードは、それ自身のアセンブリになります。アセンブリは、自身のアプリケーションドメイン内にある場合を除き、アンロードすることはできません。また、動的にコンパイルすることは難しいので、ほとんどの人は避けても大丈夫です。

問題へのさまざまなアプローチが提案されていますon this very site

あなたが説明したことに対する1つの解決策のソースコードは、リンクが有効なままである場合はhereです。

+0

はJavaでこれが可能ですか? :-) – MacGyver

関連する問題