0

これが1つです。1 つのプロジェクト / ソリューションに多数の T4 があります。これは、サポート コードと T4 テンプレートを備えたフレームワークです。

別のソリューションでこのフレームワークを使用したいのですが、サポート クラス/T4 は元のソリューションのままです。

新しいソリューションでは、サポート コードと T4 にリンクします (既存の / リンクを追加します)。新しいソリューションには、リンクされた T4 を含める必要がある T4 があります。次のようなものがあります。

<#@ template language="C#" debug="false" hostspecific="true"#> <#@ include file="..\Models\DALContextGenerator.tt"#> <#@ output extension=".cs"# ><# Generate("..\Models\Model1.edmx");

>

この場合、DALContextGenerator.tt はこのソリューションにありますが、別のソリューションで実際の DALContextGenerator.tt にリンクされています。T4 を実行すると、エラーが発生します (「インクルード テキストの解決に失敗しました」)。物理的な場所を参照すれば問題ありません。

何か案は?

ありがとう

レイ

4

2 に答える 2

1

私の知る限り、T4 エンジンはテンプレート ファイルをルートとして使用し、Visual Studio ソリューションとソリューション アイテムを認識しません。別の場所にあるファイルへの Visual Studio リンクを使用している場合、この情報はプロジェクト ファイルにのみ保存されます。T4 エンジンは、T4 ファイルに関連するインクルード パスを検索します。そのため、Visual Studio リンクの参照は比較的失敗します。ただし、絶対パスまたは物理ファイルを指す相対パスを使用してインクルード ファイルを参照すると、成功します。

ここにあなたの問題に対処する方法のいくつかのアイデアがありますが、私が考えることができる「スムーズな」解決策はありません:

  • 元のインクルード ファイルとテンプレート ファイルの隣にあるファイルとの間のハード リンクを使用します (コマンド ライン: mklink /H source target) 。
  • ソース管理システム (svn など) を使用している場合は、オリジナルを複製せずに外部ディレクトリを操作できます。
  • Env.DTE Visual Studio Model から取得した情報に基づいて、適切なパスを使用して実際の T4 テンプレートを生成する (メタ) T4 テンプレートを用意します。
于 2013-03-25T16:53:35.460 に答える