T4 Get Current Working Directory of Solution

aceinthehole picture aceinthehole · Feb 10, 2011 · Viewed 16.6k times · Source

I am using T4 in Visual Studio 2010, and I want to iterate over the files in my solution, however I have found that T4 source generation works in a kind of a sandbox, and the current working directory is inside of the Visual Studio 10 directory in program files.

Is there a way to reference the solution the T4 file is in relativistically, so that it doesn't break the build, or works on some one else's box that doesn't have the same file structure etc?

Thanks

Answer

Shiv Kumar picture Shiv Kumar · Feb 10, 2011

You must set the hostspecific attribute to true like so:

<#@ template language="C#" hostspecific="True" #>

The ITextTemplatingEngineHost interface will give you the information you need.

<#= this.Host.ResolveParameterValue("-", "-", "projects") #>

I don't believe there is a way to reference the solution, but you can get the path in which your *.tt file is and from there get other files.

To load a file from a location relative to the text template, you can use this:

this.Host.ResolvePath("relative/path.txt")