Visual Studio 2010でT4を使用していますが、私のソリューションでファイルを繰り返し処理したいのですが、T4ソース生成が一種のサンドボックスで動作し、現在の作業ディレクトリは、プログラムファイル内のVisual Studio 10ディレクトリ内にあります。T4ソリューションの現在の作業ディレクトリを取得する
T4ファイルが相対論的に参照される方法はありますか?ビルドを壊さないようにするか、同じファイル構造を持たない他のボックスで動作しますか?
おかげ
Visual Studio 2010でT4を使用していますが、私のソリューションでファイルを繰り返し処理したいのですが、T4ソース生成が一種のサンドボックスで動作し、現在の作業ディレクトリは、プログラムファイル内のVisual Studio 10ディレクトリ内にあります。T4ソリューションの現在の作業ディレクトリを取得する
T4ファイルが相対論的に参照される方法はありますか?ビルドを壊さないようにするか、同じファイル構造を持たない他のボックスで動作しますか?
おかげ
あなたがそうのようにtrueにhostspecific
属性を設定する必要があります。
<#@ template language="C#" hostspecific="True" #>
ITextTemplatingEngineHost
インタフェースはあなたが必要な情報を提供します。
<#= this.Host.ResolveParameterValue("-", "-", "projects") #>
私は解決策を参照する方法があるとは思わないが、あなたはあなたの*.tt
ファイルがあるパスを取得し、そこから他のファイルを取得することができます。
テキストテンプレートに対する位置からファイルをロードするには、あなたがこれを使用することができます:
this.Host.ResolvePath("relative/path.txt")
これは私が解決策のベースディレクトリを取得するために使用する方法である:
public string GetSolutionDirectory()
{
var serviceProvider = this.Host as IServiceProvider;
var dte = serviceProvider.GetService(typeof(EnvDTE.DTE)) as EnvDTE.DTE;
return System.IO.Path.GetDirectoryName(dte.Solution.FullName);
}
ここですXMLファイルを作成するT4テンプレートで提供されるロジックJCallicoを使用する方法:
XML att ribute "filePath"は、Visual Studioのソリューションディレクトリに "\ MySubfolder \ MyFile.exe"を加えたものと等しくなります。
ありがとうございました!私はthis.Host.TemplateFileを使用して終了しました。テンプレートはテンプレートを直接指し示し、そこから実行されました。 – aceinthehole
@aceinthehole、フィードバックありがとう! –
DTEを読み込むことで、直接ソリューションを入手できます。http://stackoverflow.com/questions/12952110/accessing-projects-via-d------)-template –