36

いくつかのコード生成テンプレートをチームの自動ビルド プロセスに接続しようとしています。私たちの SCM チームは、ビルド マシンに Visual Studio を使用することを望んでいません (私はこれについて議論するのに苦労しています)。

Visual Studio を使用せずに T4 エンジンをインストールする方法はありますか?

4

6 に答える 6

39

MonoDevelop IDE 用の T4 エンジンのクリーンなリバース エンジニアリング実装を作成しました。これはオープンソースであり、寛大な MIT/X11 ライセンスの下でライセンスされているため、エンジンをアプリに自由に組み込んだり、再配布したりできます。また、dotnet グローバル ツールとして利用できる TextTransform.exe コマンド ライン ツールの実装と、エンジンのホスティングを支援する Mono.TextTemplating 名前空間のいくつかの API もあります。

パッケージは NuGet から入手でき、ソースは GitHub にあります

于 2009-09-08T17:56:27.883 に答える
36

実際にコードを生成しているわけではありません... Sandcastle スクリプトを生成していて、それをビルド サーバー上で確実に実行したいと考えています。ドキュメントの生成方法を形作る一連のカスタム属性を作成してコードを装飾するというアプローチをとっています。したがって、これらの属性のアセンブリを反映する .tt ファイルのセットがあり、Sandcastle の入力ファイル (.shfb) を生成します。カスタム ツールを使用することもできましたが、T4 がうまく適合しました。

とにかく... Visual Studio なしで TextTransform.exe を実行できることを確認しました。必要なのは、存在する Microsoft.VisualStudio.TextTemplating.dll だけです。新しい VM を作成し、.NET 3.5 をインストールして、以下をファイル システムにコピーしました。

  • TextTransform.exe
  • TextTemplate.ico
  • Microsoft.VisualStudio.TextTemplating.dll
  • Test.tt (私が作成したもの)

Test.tt は次のようになります。

<#@ template language="C#3.5" debug="true" hostspecific="true" #>
<#@ assembly name="System.Xml" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Collections"#>
<#@ import namespace="System.Collections.Generic"#>
<#@ import namespace="System.Xml" #>
<#@ output  extension=".cs" #>

テスト: <#=System.DateTime.Now.ToString()#>....

VM から次のように Test.tt を実行しました。

C:\TextTransform.exe Test.tt

そして Test.cs が作成されました

テスト: 6/10/2009 5:33:32 PM....

勝利!!!!

最も困難な部分は、Microsoft.VisualStudio.TextTemplating.dll を見つけることでした。FileMon を起動し、Visual Studio を搭載したボックスでテンプレートを実行する必要がありました。次に FileMon は、TextTransform.exe がどこからファイルを読み込んでいるかを教えてくれました。これはいくつかの場所にある可能性がありますが、GAC の C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.TextTemplating\9.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.TextTemplating.dll で見つけました。Windows エクスプローラーを使用してその場所を参照するには、次のような subst を作成する必要がありました。

subst X: C:\Windows\assembly

次に、X:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.TextTemplating\9.0.0.0__b03f5f7f11d50a3a\ を参照して、dll をコピーします。

とにかく...マニッシュなアイデアをありがとう。うまくいけば、これはいつか他の貧しい魂を助けるでしょう:)

于 2009-06-10T22:46:21.687 に答える
9

だから、これは私が採用することになったアプローチです:

Visual Studio 2010 sp1を備えた開発マシンとビルドマシン(msbuildを使用)があります。

  1. 開発用マシンにVisualStudio2010sp1sdkをインストールします
  2. 開発用マシンに、Microsoft Visual Studio 2010 Visualization&ModelingSDKをインストールします
  3. ビルドマシンでフォルダを作成します
  4. 次のファイルを開発マシンからビルドマシンの新しいフォルダーにコピーします。
    • \ Program Files \ Microsoft Visual Studio 2010 SDK \ VisualStudioIntegration \ Common \ Assembly \ v4.0 \
      • Microsoft.VisualStudio.TextTemplating.10.0.dll
      • Microsoft.VisualStudio.TextTemplating.Interfaces.10.0.dll
      • Microsoft.VisualStudio.TextTemplating.VSHost.10.0.dll
    • \ Program Files \ MSBuild \ Microsoft \ VisualStudio \ TextTemplating \ v10.0 \
      • Microsoft.VisualStudio.TextTemplating.Sdk.Host.10.0.dll
    • \ Program Files \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ PublicAssemblies \
      • Microsoft.VisualStudio.TextTemplating.Modeling.10.0.dll
    • \ Program Files \ Common Files \ microsoft shared \ TextTemplating \ 10.0 \
      • TextTransform.exe
      • TextTransform.ico

干し草プレストあなたは行ってもいいはずです。


参考文献:


于 2011-05-18T16:08:59.753 に答える
5

試したことはありませんが、コマンド ライン ツールを使用してビルド サーバーにドロップし、ビルド前/ビルド中にテンプレートを変換できると思います。

http://msdn.microsoft.com/en-us/library/bb126461.aspx

于 2009-06-10T21:43:35.120 に答える
3

私の理解では、Visual Studio をインストールする必要があります。なぜ流れに逆らって泳ぐのですか?ビルド時ではなく設計時にコードを生成することを検討したことがありますか?

于 2009-06-10T21:56:46.030 に答える
0

12の場合、コピーするだけです

C:\Program Files (x86)\Common Files\Microsoft Shared\TextTemplating\12.0

于 2015-04-09T09:22:39.780 に答える