【问题标题】:T4 Template is Generating Extra New Lines on Some PCsT4 模板正在某些 PC 上生成额外的新行
【发布时间】:2016-09-13 16:30:59
【问题描述】:

在为实体框架使用 T4 类时,有几个开发人员在生成类时为每一行生成一个额外的新行。我想知道这是否是某种需要更改的设置,以便他们的 T4 生成文件看起来像其他开发人员生成的文件。作为我正在谈论的示例:(删除了特定名称,但您应该能够看到从同一个 *.tt 文件生成的新行数的差异。)

更新:此问题也出现在其他 T4 模板中,而不仅仅是 EF。两台 PC 都使用 TextTemplatingFileGenerator 作为 T4 自定义工具。)

我的电脑的 T4 输出:

    public virtual DbSet<GeneratedObject1> GeneratedObject1 { get; set; }
    public virtual DbSet<GeneratedObject2> GeneratedObject2 { get; set; }

    public virtual int SomeMethod1(Nullable<int> inParameter)
    {
        var localParameter = inParameter.HasValue ?
            new ObjectParameter("SomePropertyName", inParameter) :
            new ObjectParameter("SomePropertyName", typeof(int));

        return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("SomeMethod1", localParameter);
    }

    public virtual int SomeMethod2(Nullable<int> inParameter)
    {
        var localParameter = inParameter.HasValue ?
            new ObjectParameter("SomePropertyName", inParameter) :
            new ObjectParameter("SomePropertyName", typeof(int));

        return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("SomeMethod2", localParameter);
    }

他们 PC 的 T4 输出:

public virtual DbSet<GeneratedObject1> GeneratedObject1 { get; set; }

public virtual DbSet<GeneratedObject2> GeneratedObject2 { get; set; }


public virtual int SomeMethod1(Nullable<int> inParameter)
{

    var localParameter = inParameter.HasValue ?
        new ObjectParameter("SomePropertyName", inParameter) :
        new ObjectParameter("SomePropertyName", typeof(int));


    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("SomeMethod1", localParameter);
}


public virtual int SomeMethod2(Nullable<int> inParameter)
{

    var localParameter = inParameter.HasValue ?
        new ObjectParameter("SomePropertyName", inParameter) :
        new ObjectParameter("SomePropertyName", typeof(int));


    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("SomeMethod2", localParameter);
}

编辑:

(文件中的文本大致相同。) 我的文件:

他们的档案:

【问题讨论】:

  • 它们是否在完全相同的 Visual Studio 版本以及实体框架版本上?
  • 是的,VS 2015(在我们使用 2013 时也发生了),Entity Framework 版本是项目的一部分,并且在 repo 中,所以对我们双方来说应该是一样的。
  • 你能在十六进制编辑器中打开文件并发布截图吗?我很想知道文件的原始内容是什么,包括回车、换行、不可打印的字符等。
  • 已更新,但我并没有真正看到任何突出的地方。
  • @Thomas927 我有时遇到从 git 返回的行尾问题。所以我在这里生成的 tt 文件中什么也看不到? (您的输出中有 0D 0A 与 0D 0A 0D 0A 相比)

标签: c# t4


【解决方案1】:

什么@ralf.w。正在解决这个问题。问题计算机上.tt 文件中的行结尾是LF,这会导致在转换工具运行时生成额外的行结尾。正确的行尾应该是CRLF。一旦我们更改了.tt 文件中的行尾,就会正确生成输出文件。我还将 Git 中的行尾设置更改为按原样签出,按原样提交。 This question 提供了一些关于行尾设置的含义以及可以更改它们的位置的信息。

使用记事本++将问题.tt文件转换为CRLF(我们没有那么多。)转到EditEOL ConversionWindows (CR LF)

【讨论】:

  • 感谢 Thomas - 节省了我浪费的更多时间。对于那些像我一样搜索的人,我使用 EF.Reverse.POCO.Generator 遇到了这个问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 2016-01-21
  • 2023-01-30
  • 2011-10-16
  • 2013-10-03
相关资源
最近更新 更多