如何使用 Cake 脚本执行 t4 模板
How to execute t4 template using the Cake script
使用 Cake build
执行 T4 template
的 API / 语法是什么?任何示例代码都会有所帮助。
是否应该使用 StartProcess API 来调用 texttransform.exe
或是否有任何其他可用的 API。
在 Cake 中有两个内置的别名用于 T4 templates,
TransformTemplate(ICakeContext, FilePath) 和
TransformTemplate(ICakeContext, FilePath, TextTransformSettings)
用法示例:
#tool "nuget:?package=Mono.TextTransform&version=1.0.0"
Task("TransformTemplate")
.Does(() => {
var templateFile = File("./Template.tt");
TransformTemplate(templateFile);
});
RunTarget("TransformTemplate");
使用的示例模板
Template generated <#=DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss")#>
示例模板结果
Template generated 2020-02-12 11:19:08
如果您安装了 .NET Core,建议您使用 dotnet-t4 全局工具,因为它维护得更好。
示例蛋糕脚本使用 dotnet-t4 全局工具(蛋糕工具分辨率将自动根据它首先找到的工具使用 t4.exe 或 texttransform.exe,就像您可以使用的任何工具一样在这种情况下覆盖 ToolSettings ToolPath 属性 使用的工具 TextTransformSettings
#module nuget:?package=Cake.DotNetTool.Module&version=0.4.0
#tool "dotnet:?package=dotnet-t4&version=2.0.5"
Task("TransformTemplate")
.Does(() => {
var templateFile = File("./HelloWorld.tt");
var targetFile = File("./HelloWorld.txt");
var settings = new TextTransformSettings {
OutputFile = targetFile,
Properties = {
["FirstName"] = "John",
["LastName"] = "Doe"
}
};
TransformTemplate(templateFile, settings);
});
RunTarget("TransformTemplate");
例子HelloWorld.tt
<#@ parameter name='FirstName' #>
<#@ parameter name='LastName' #>
Hello <#=FirstName#> <#=LastName#>!
示例结果 HelloWorld.txt
Hello John Doe!
要使用 Cake.DotNetTool.Module
我们 atm 需要 bootstrap 以便从 NuGet 获取模块(在 Cake 1.0 中不需要),示例执行
dotnet cake .\t4.cake --bootstrap
dotnet cake .\t4.cake
正如下面使用指令处理器的示例所要求的那样(注意:在单声道 T4 中,这是折旧的,因此只能完全使用 TextTransform.exe 的 VisualStudio 版本),指令处理器当前未包装在 TextTransformSettings but we can sort it like any Cake tool through ToolSettings ArgumentCustomization 属性.
示例模板DirectiveTemplate.tt
<#@template language="c#" hostspecific="true"#>
Hello <#= this.Host.ResolveParameterValue("", "", "greet") #>!
示例 Cake 脚本,我们使用 VSWhere 来定位 TextTransform.exe
的 VisualStudio 版本,使用 Cake 工具解析注册路径并通过参数自定义传递指令参数。
#tool "nuget:?package=vswhere&version=2.8.4"
Setup(setupContext =>{
DirectoryPath vsLatest = VSWhereLatest();
FilePath textTransformPath = vsLatest?.CombineWithFilePath("Common7/IDE/TextTransform.exe");
if (textTransformPath == null || !FileExists(textTransformPath))
{
throw new Exception("Failed to resolve TextTransform.exe path.");
}
setupContext.Tools.RegisterFile(textTransformPath);
});
Task("T4")
.Does(() => {
var settings = new TextTransformSettings {
ArgumentCustomization = args => args.AppendSwitchQuoted("-a", " ", "!!greet!John")
};
TransformTemplate("./DirectiveTemplate.tt", settings);
});
RunTarget("T4");
DirectiveTemplate.txt
中的结果将是
Hello John!
使用 Cake build
执行 T4 template
的 API / 语法是什么?任何示例代码都会有所帮助。
是否应该使用 StartProcess API 来调用 texttransform.exe
或是否有任何其他可用的 API。
在 Cake 中有两个内置的别名用于 T4 templates, TransformTemplate(ICakeContext, FilePath) 和 TransformTemplate(ICakeContext, FilePath, TextTransformSettings)
用法示例:
#tool "nuget:?package=Mono.TextTransform&version=1.0.0"
Task("TransformTemplate")
.Does(() => {
var templateFile = File("./Template.tt");
TransformTemplate(templateFile);
});
RunTarget("TransformTemplate");
使用的示例模板
Template generated <#=DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss")#>
示例模板结果
Template generated 2020-02-12 11:19:08
如果您安装了 .NET Core,建议您使用 dotnet-t4 全局工具,因为它维护得更好。
示例蛋糕脚本使用 dotnet-t4 全局工具(蛋糕工具分辨率将自动根据它首先找到的工具使用 t4.exe 或 texttransform.exe,就像您可以使用的任何工具一样在这种情况下覆盖 ToolSettings ToolPath 属性 使用的工具 TextTransformSettings
#module nuget:?package=Cake.DotNetTool.Module&version=0.4.0
#tool "dotnet:?package=dotnet-t4&version=2.0.5"
Task("TransformTemplate")
.Does(() => {
var templateFile = File("./HelloWorld.tt");
var targetFile = File("./HelloWorld.txt");
var settings = new TextTransformSettings {
OutputFile = targetFile,
Properties = {
["FirstName"] = "John",
["LastName"] = "Doe"
}
};
TransformTemplate(templateFile, settings);
});
RunTarget("TransformTemplate");
例子HelloWorld.tt
<#@ parameter name='FirstName' #>
<#@ parameter name='LastName' #>
Hello <#=FirstName#> <#=LastName#>!
示例结果 HelloWorld.txt
Hello John Doe!
要使用 Cake.DotNetTool.Module
我们 atm 需要 bootstrap 以便从 NuGet 获取模块(在 Cake 1.0 中不需要),示例执行
dotnet cake .\t4.cake --bootstrap
dotnet cake .\t4.cake
正如下面使用指令处理器的示例所要求的那样(注意:在单声道 T4 中,这是折旧的,因此只能完全使用 TextTransform.exe 的 VisualStudio 版本),指令处理器当前未包装在 TextTransformSettings but we can sort it like any Cake tool through ToolSettings ArgumentCustomization 属性.
示例模板DirectiveTemplate.tt
<#@template language="c#" hostspecific="true"#>
Hello <#= this.Host.ResolveParameterValue("", "", "greet") #>!
示例 Cake 脚本,我们使用 VSWhere 来定位 TextTransform.exe
的 VisualStudio 版本,使用 Cake 工具解析注册路径并通过参数自定义传递指令参数。
#tool "nuget:?package=vswhere&version=2.8.4"
Setup(setupContext =>{
DirectoryPath vsLatest = VSWhereLatest();
FilePath textTransformPath = vsLatest?.CombineWithFilePath("Common7/IDE/TextTransform.exe");
if (textTransformPath == null || !FileExists(textTransformPath))
{
throw new Exception("Failed to resolve TextTransform.exe path.");
}
setupContext.Tools.RegisterFile(textTransformPath);
});
Task("T4")
.Does(() => {
var settings = new TextTransformSettings {
ArgumentCustomization = args => args.AppendSwitchQuoted("-a", " ", "!!greet!John")
};
TransformTemplate("./DirectiveTemplate.tt", settings);
});
RunTarget("T4");
DirectiveTemplate.txt
中的结果将是
Hello John!