11

TextTemplatingFilePreprocessor を使用して T4 で読んだ記事では、プロジェクトの一部となり、プロジェクトと共にコンパイルされるコードを動的に生成する方法が示されています。

T4 を使用して、実行時にコンパイルされ、dll に出力され、読み込まれて実行されるコードを生成することはできますか?

もしそうなら、例を教えてください。

私は事実上、IL を使用して動的 dll を生成するのと同じことをしようとしていますが、C# を使用しています。

編集

これが必要な特定のケースは簡単です。メッセージをサービスにルーティングするメッセージ ルーターを作成しています。サービスは、ローカルまたはリモートの場合があります。宣言型スクリプトは C# にコンパイルされます。動的な部分は、「このサービスはローカルかリモートか?」です。それに応じて、出力 C# が変更されます。ローカルとリモートではルーティングのスタイルが異なるため、動的な性質があります。

これは私が必要とするものの一例です。

4

1 に答える 1

6

これを行うには、次の 2 つのことを知っておく必要があります。

  1. ランタイム T4 テンプレートを使用して、C# ソース コードなどのテキストを実行時に生成できます。
  2. を使用CSharpCodeProviderして、実行時にテキストからアセンブリをコンパイルできます。または、生成されたテキストに対して csc.exe (コマンドライン C# コンパイラ) を手動で実行することもできますが、それはより複雑になります。(実際CSharpCodeProviderには、舞台裏で正確にそれを行います。)

コードは次のようになります。

var template = new RuntimeTextTemplate();
string code = template.TransformText();

var compiler = new CSharpCodeProvider();
var result = compiler.CompileAssemblyFromSource(
    new CompilerParameters { OutputAssembly = "assembly.dll" }, code);
于 2013-03-01T19:10:33.523 に答える