6

現在 String.Format を使用してプレースホルダーを埋め込み、コードを動的に生成していますが、テンプレートとして使用するために C# コードを再フォーマットするのは面倒で、T4 テンプレートを使用する方が良いと思います。

ただし、コード生成は実行中のシステムで行われるため、Microsoft T4 Engine を製品と共に安全かつ合法的に再配布できることを知る必要があります。

他の誰かがこれをしましたか?または(法的)答えを知っていますか?

4

7 に答える 7

5

すぐに別の選択肢ができそうです。

昨日、Miguel de Icaza が MonoDevelop での T4 の統合について投稿したので、モノと同等の T4 ツールセットがいつでも存在することを期待しています。

参照: http://tirania.org/blog/archive/2009/Mar-10.html

于 2009-03-12T09:42:40.177 に答える
3

T4 はDSLToolsRedistの一部として再配布できますが、Visual Studio 2005 スタンダード エディション以上が既にインストールされている必要があります。現時点では、T4 を Visual Studio なしで合法的に再配布できるとは思えません。あなたが説明したシナリオは、Visual Studio 2010 で直接サポートされます。

于 2009-01-14T14:32:03.617 に答える
2

私には答えがありますが、残念ながらオレグが提案したようにそれはノーです。(ちなみにオレグはT4で素晴らしい仕事をしました)。現時点では T4 を再配布することはできません。これは VS の一部です。VS2010 では、T4 テンプレートをプリコンパイルし、それらのプリコンパイル済みテンプレートを T4 に依存せずにアプリケーションで再配布して実行することができます。

于 2009-01-15T10:10:05.173 に答える
2

明確にするために、公式の回答では、Microsoft T4 エンジンを Visual Studio とは別の部分として配布することはできません。

ただし、Visual Studio 2010 の時点では、Visual Studio に依存しないプリコンパイル済みテンプレートを使用および再配布できます。

Visual Studio がインストールされているマシンでは、Visual Studio の外部で T4 を使用することもできます。

また、Visual Studio Isolated Shell のライセンスを無料で取得して再配布し、それをツールのホストとして使用することもできます (これには T4 が含まれています)。

Visual Studio 2010 SP1 の時点で、VS インストール ディレクトリの buildserver.txt のライセンスを使用して、T4 をビルド マシンにコピーするライセンスが付与されています。

于 2011-01-15T22:47:50.240 に答える
1

VS2008 が登場する前から、別の appdomain でコードをコンパイルする独自のテンプレート コード ジェネレーター システムがあります。

興味のある方は、コメントを投稿してください。コードへの URL を投稿します。

私のテンプレート エンジンを使用するコードはここにあります。Web ブラウザで参照するか、Subversionクライアントで参照することができます。ここで始まるリンクは実際には単語の後に停止しますが、サーバー側の WMD レンダラーはリンクを次のテキストに漏らします。

その名前空間に単一のファイルをコピーするだけでは、それ自体ではコンパイルされないことに注意してください。LVK.Delegates と LVK.Scripting にいくつかの要素が必要であり、上記のリンクから数レベル上の名前空間が必要です。ライブラリ全体を吸い込みたくない場合は、コンパイルが完了するまで、問題のある部分を一度に 1 つずつ抽出する必要があります。

同じリポジトリの/LVK_3_5/trunk/Binaries/Debug/LVKにはライブラリのバイナリ バージョンもあります。それをダウンロードすると、参照を追加してクラスLVK.Text.Templates.TextTemplateをチェックするだけです。

残念ながら、現時点では私のライブラリの例はありません。

基本的に、テンプレートを使用するには:

TextTemplate tt = new TextTemplate();
tt.Source = "... code here, check example file above ...";
tt.Compile();
String output = tt.Generate(singleObjectParameter);

基本的に、単一のメソッドに挿入されるすべてのコードであるテンプレート内 (つまり、メソッドを簡単に追加できるという点では T4 ほど良くありませんが、匿名メソッドを使用できます) にアクセスできます。 data という名前のパラメータとして渡されたデータ オブジェクト。

したがって、渡されたパラメーターの内容を出力するには、次のようにします。

<%= data %>

それを繰り返すには:

<% for (Int32 index = 0; index < 10; index++) { %>
<%= data %>
<% } %>

ご不明な点がございましたら、私のメール lasse@vkarlsen.no までお送りください。

于 2009-01-15T10:21:24.277 に答える
0

本当に残念ですが、Oleg が指摘するように、テストされていない場合、どうすればリリースできますか。

Lassevk さん、確かに私は興味があります - 約 10 年前に私が構築したテンプレート エンジンを再ハッシュすることを考えていましたが、私は常に楽な人生を求めています!

于 2009-01-15T12:00:07.760 に答える
0

これは 2006 年に (T4 が何であるかを知る前に!) 出てきたことを思い出し、検索して見つけたhttp://social.msdn.microsoft.com/Forums/en-US/vsx/thread/1ab0bf3f-2810-4adf -bf75-900b98dee8e2/残念ながら、gotdotnet リンクが壊れています。そのスレッドで、VS の外で T4 を合法的にホストして再配布できることに同意しているかどうかを判断するのは難しいです。

于 2009-01-14T17:46:29.463 に答える