How to disable #line directives being written to the T4 generation output file

二次信任 提交于 2019-12-03 22:31:02

Visual Studio 2012 adds the linePragmas="false" template directive:

<#@ template language="C#" linePragmas="false" #>

http://msdn.microsoft.com/en-us/library/gg586945(v=vs.110).aspx

Still not sure how to do this in VS2010 which I'm stuck with at work.

I'm not sure this will fix your problem. I don't have a great deal of experience with T4. That said, I'm using it build a number of files in my project and I have not run into the problem you are running into.

In my case, I have a bunch of individual .tt files that render individual files in my project.

The way I'm doing it is as follows: I have a SaveOutput method (stolen from somewhere on stackoverflow, I believe):

void SaveOutput(string outputFileName)
{
    if (!string.IsNullOrEmpty(outputFileName))
    {
        string templateDirectory = Path.GetDirectoryName(Host.TemplateFile);
        string outputFilePath = Path.Combine(templateDirectory, outputFileName);
        string output = this.GenerationEnvironment.ToString();
        File.WriteAllText(outputFilePath, output); 
    }

    this.GenerationEnvironment.Remove(0, this.GenerationEnvironment.Length);
}

So in my main .tt file, I have <#@ includes... #> for my various .tt files for the individual files. For example: <#@ include file="DataObjectInterface.tt" #>

<#+
    public string GenerateInterfaceDataObject(sqlTable table)
    {
        string ifaceName = "I" + table.ObjectName;
        if (table.GenerateInterfaceObjectAsBase)
        {
            ifaceName += "Base";
        }
#>
using System;

namespace <#= InterfaceNamespace #>
{
    public interface <#= ifaceName #>
    {
<#+
        foreach(sqlColumn col in table.Columns)
        {
#>
        <#= GetColumnCSharpDataType(col) #> <#= col.FieldName #> { get; }
<#+
        }
#>
    }
}
<#+
        return RootPath + @"\AutoGenerated\" + ifaceName + ".cs";
    }
#>

Then, in my main .tt class, I simply make a call like this:

string filePath = GenerateInterfaceDataObject(table);
SaveOutput(filePath);

Not sure if this method of breaking your templates up will work for your needs, but it worked for mine and I haven't run into any problems with it yet.

I should clarify that my main .tt file doesn't actually generate anything from itself. It is not itself a template. It simply loads each of the templates and generates the files from the the other templates.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!