我一直在尝试使用 T4 模板为具有方法和属性的类生成代码。虽然它符合我的目的,但它缺少一些非常理想的生产力功能,例如 Macintosh 上的语法突出显示、片段和模板。趋势似乎正在远离 T4。我在使用其他模板标记引擎(例如 Scriban 和 Liquid)时遇到了同样的问题,
Razor 模板似乎是一种替代方案,但它似乎更适合生成 HTML 标记代码。还不清楚它的语法是否与目标代码输出区域冲突,以及将代码作为单独的文件输出是否简单。 Razor 能否生成面向对象的代码并在 Web 应用程序的上下文之外运行?
简短的回答是肯定的,但我确实这样做了,我不确定我会推荐用 Razor 这样做。我使用 RazorEngine 为一组数据库表生成骨架模型和 UI CrUD 表单。我将表模式拉入内部对象模型,对其进行了一些操作,并将其用作模板的输入模型。这是我用于创建 C# 类的 Razor 模板的简化示例:
public partial class @(Model.ObjectName)
{
public @(Model.ObjectName) ()
{
}
@foreach (UIGen.UITableCol Col in Model.Columns)
{
if (!Col.IsNullable)
{
<text>[System.ComponentModel.DataAnnotations.Required(AllowEmptyStrings=false)]</text>
}
if (Col.CSharpType == "string" && Col.MaxLength > 0)
{
<text>[StringLength(@Col.MaxLength)]</text>
}
@(Col.MVCPropertyAttributes)
<text>[DisplayName("@(UIGen.Helpers.ToCSharpStringLiteral(Col.ColLabel))")]
[Column]
public @Col.CSharpType @Col.ColName { get; set; }
</text>
}
}
它对我有用,但我不会全心全意推荐它的原因是: