0

データベース テーブルにいくつかの C# コードを格納しました。

文字列に基本クラスのコード全体があります。

m1保存された C# コードを使用して、クラスにという名前のメソッドを追加しreturn <<some C# code>>;(メソッドは常に返さobjectれるため、C# コードは 、 、 などになり88 + 90ます"hello world") this.ToString()、ファイルに保存して でコンパイルしCSharpCodeProvider、実行します。私のプログラムでそれ。

格納された C# コードは、基本クラスのいくつかのメソッドを使用できます。

このスキームは非常にうまく機能します。

ここでReflection.Emit、コンパイル手順を避けるために、これを行うために使用します。

これは可能ですか?

4

1 に答える 1

1

ここでReflection.Emit、コンパイル手順を避けるために、これを行うために使用します。

それは私にはあまり意味がありません。実行したいソース コードがある場合、基本的に次の 2 つのオプションがあります。

  1. 直接実行できる他の形式にコンパイルします。(C のような古典的なコンパイル済み言語は、このように機能します。)
  2. それをメモリ内構造に解析してから、それを少しずつ実行します。(従来のインタープリター言語は、古いブラウザーの JavaScript のように、このように機能します。)

最近では、仮想マシンや中間言語などのために、実際にはそれほど単純ではありませんが、それらは基本的な選択です。

CodeDOM を使用したくない場合は、次の 2 つの選択肢があります (上記の 2 つのオプションに対応)。

  1. コードを解析し、おそらくReflection.Emit.
  2. コードを解析し、結果を直接実行します。その必要はありませんReflection.Emit

選択肢 1 は、完全な C# コンパイラを実装する必要があることを意味します。選択肢 2 は、C# コンパイラの半分と、メモリ内構造のインタープリターを実装する必要があることを意味します。どちらの場合も、それは巨大なプロジェクトであり、「コンパイルのステップを避ける」ことはできません。

于 2012-11-21T21:31:54.743 に答える