Control the filename generated by a T4 template?

t4
Todd Davis picture Todd Davis · Jan 30, 2013 · Viewed 7.8k times · Source

How can I instruct a T4 template to generate the resulting file with a given file name?

I'll try to be more clear. Let's say I have a template called Insert.tt that generates code to insert a record into a table. It has an output extension of "sql", so it creates a file called:

Insert.sql

That's OK, but I'd like the file name to reflect whatever it is I'm trying to do. Let's say that the name of the table I'm generating an Insert for is stored in <#= TableName #>. I'd like to pass that to the template generator and have it use that to save the resulting file.

i.e. <# SaveTemplateAs("Insert" + TableName); #>

So let's say I generate Insert statements for tables User, Address and Phone.

I want the resulting files to be named InsertUser.sql, InsertAddress.sql and InsertPhone.sql.

I'm pretty sure this can be done as I've seen some custom extensions to generate multiple files from a single template, but I'm not understanding a simple (not overkill) way to make this happen.

Thanks

Answer

Rolf Cerff picture Rolf Cerff · Sep 3, 2014

Unfortunately that seems not be possible in the .tt file itself. But you can control output file name in the .csproj file of the project where the text template resides. Unload the project from Visual Studio solution and open the project file e.g. .csproj directly in a text editor.

There you find the reference of the template file.

The node <LastGenOutput> controls the output filename. Here you can choose a file name you want.