0

InterSystems Cache コードでは、間接化を使用して文字列を取得し、文字列変数の前に「@」を付けることで、それを実際の実行可能コードに変換できることを覚えています。これは C#.NET または VB.NET コードで実行できますか? したがって、文字列の引数配列 (1 行または複数行のコード) を受け取り、例外をスローしないと仮定してそのコードを実行するメソッドが必要です。これでどこに行くの?.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
4

2 に答える 2

1

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

文字列のコンパイルは、Intersystems Cache の方法に似ていますが、コンパイラが必要とするすべての情報を提供する必要があるため、さらに手間がかかります。CompilerParameters クラス を見ると 、複雑さが増していることがわかります。コンパイルされたコードは、独自のアセンブリになります。アセンブリは、独自のアプリ ドメインにない限りアンロードできません。また、動的にコンパイルする場合、ほとんどの人はそれを避けることができれば気にしないほど困難です。

このサイトでは、問題に対するさまざまなアプローチが提案されています。

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

于 2012-04-05T17:21:46.627 に答える
1

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

于 2012-04-04T05:52:35.977 に答える