使用t4模板进行错误的缩进

Joh*_*rby 16 c# t4 code-generation

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

例如,我在模板中有这个代码

}
    <# } #>
    this.cmbDecisionList.Dat = dataSource;
    this.btnDec.Enabled = dataSource.Count > 0;
}
Run Code Online (Sandbox Code Playgroud)

在生成的类中它就像

}
                 this.cmbDecisionList.Dat = dataSource;
      this.btnDec.Enabled = dataSource.Count > 0;
}
Run Code Online (Sandbox Code Playgroud)

Phi*_*ens 33

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

}
....<# } #>
....this.cmbDecisionList.Dat = dataSource;
    this.btnDec.Enabled = dataSource.Count > 0;
}
Run Code Online (Sandbox Code Playgroud)

在生成的类中它就像

}
........this.cmbDecisionList.Dat = dataSource;
    this.btnDec.Enabled = dataSource.Count > 0;
}
Run Code Online (Sandbox Code Playgroud)

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

}
<# } #>
....this.cmbDecisionList.Dat = dataSource;
    this.btnDec.Enabled = dataSource.Count > 0;
}
Run Code Online (Sandbox Code Playgroud)

在生成的类中它就像

}
....this.cmbDecisionList.Dat = dataSource;
    this.btnDec.Enabled = dataSource.Count > 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 看到对这个问题的解决方案这么简单但准确的描述我几乎哭了,这个问题一直困扰着我很长一段时间.谢谢. (4认同)

Jus*_*mer 10

我认为你努力获得可读的生成代码是件好事.我们将坐下来尝试偶尔调试生成的代码,这样如果它很容易就会很好(我们永远不会编辑生成的代码).

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

Generated code
<#
    T4 statements
#>
Generated code
Run Code Online (Sandbox Code Playgroud)

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

然后您的代码将更改为:

}
<# 
    } 
#>
    this.cmbDecisionList.Dat = dataSource;
    this.btnDec.Enabled = dataSource.Count > 0;
}
Run Code Online (Sandbox Code Playgroud)

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

它可能不是保留格式的唯一方法,但它是我使用的格式.

希望这可以帮助.