Blank lines in files generated by T4 templates
Why does my T4 text template (.tt) generate a code file full of empty lines?
After checking out an old solution and running a T4 template (.tt file) that used to work perfectly, I found that the output included a whole heap of additional line breaks.
// The template looks like this:
<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ output extension=".cs" #>
<#@ assembly name="System.Core" #>
<#
// Code to do things
#>
public class Foo() {
....
}
The output looked like this:
// The output looks like this:
public class Foo() {
....
}
There were also additional blank lines within the body of the generated class - with a blank line being present wherever a T4 tag was closed and a new line started (i.e. #>). After a bit of digging and experimentation I found that the file was checked out with LF line endings instead of CRLF line endings.
It seems that a line ending of \r\n after a closing tag is completely omitted, but if the line ending is just \n it won't be omitted and will actually be rendered out to the generated document.
The fix?
A find/replace to change changing each \n to a \r\n and then re-running the T4 template generated the correct output:
// The fixed output without any extra empty lines:
public class Foo() {
....
}