【问题标题】:Wrong indentation with t4 templatest4 模板的错误缩进
【发布时间】:2013-12-30 13:17:53
【问题描述】:

我目前正在使用 T4 模板,我注意到有时代码没有正确缩进,我该如何避免这种情况?

例如我在模板中有这段代码

}
    <# } #>
    this.cmbDecisionList.Dat = dataSource;
    this.btnDec.Enabled = dataSource.Count > 0;
}

在生成的类中是这样的

}
                 this.cmbDecisionList.Dat = dataSource;
      this.btnDec.Enabled = dataSource.Count > 0;
}

【问题讨论】:

  • 我通常通过使我的 T4 模板更丑陋并删除其中的空格来避免它,因此我生成的代码看起来更漂亮。 :)
  • 是的,但理解起来很复杂......
  • 通常生成的代码不适合阅读,但我知道您希望拥有漂亮的代码,即使它是自动生成的。除了更改 T4 模板外,您还可以在输出文件的“编辑”>“高级”菜单中使用“格式化文档”选项。据我所知,有形的 T4 编辑器在生成代码时有一个“格式输出”选项。

标签: c# code-generation t4


【解决方案1】:

我认为努力生成可读的代码是件好事。我们会坐下来尝试偶尔调试生成的代码,所以如果它看起来很容易就好了(我们从不编辑生成的代码)。

我采用了一种模式,我可能会牺牲模板的一些可读性来获得生成的代码的可读性。

Generated code
<#
    T4 statements
#>
Generated code

IE #> 总是出现在换行符之后,并在之后立即添加换行符。

然后您的代码将更改为:

}
<# 
    } 
#>
    this.cmbDecisionList.Dat = dataSource;
    this.btnDec.Enabled = dataSource.Count > 0;
}

这样生成的代码往往会按预期格式化。

这可能不是保留预期格式的唯一方法,但这是我使用的方法。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    请允许我用点替换空格来说明您的问题。

    }
    ....<# } #>
    ....this.cmbDecisionList.Dat = dataSource;
        this.btnDec.Enabled = dataSource.Count > 0;
    }
    

    在生成的类中是这样的

    }
    ........this.cmbDecisionList.Dat = dataSource;
        this.btnDec.Enabled = dataSource.Count > 0;
    }
    

    现在,让我们删除前面的点。

    }
    <# } #>
    ....this.cmbDecisionList.Dat = dataSource;
        this.btnDec.Enabled = dataSource.Count > 0;
    }
    

    在生成的类中是这样的

    }
    ....this.cmbDecisionList.Dat = dataSource;
        this.btnDec.Enabled = dataSource.Count > 0;
    }
    

    【讨论】:

    • 看到如此简单而准确的描述解决这个困扰我很长时间的问题的方法,我几乎要哭了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    相关资源
    最近更新 更多