如何使用Cake脚本执行t4模板

问题描述 投票:1回答:1

使用T4 template执行Cake build的API /语法是什么?任何示例代码都将有所帮助。

是否应使用StartProcess API来调用texttransform.exe,还是有其他可用的API。

c# continuous-integration t4 cakebuild
1个回答
3
投票

[Cake]中有两个内置别名可用于处理T4 templatesTransformTemplate(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全局工具的示例脚本脚本(Cake工具的分辨率会根据首先找到的位置自动使用t4.exe或texttransform.exe,就像使用任何工具一样,您都可以覆盖ToolSettings使用的工具[ C0]属性,在这种情况下为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! ,我们需要atm引导程序,以便从NuGet中获取模块(在Cake 1.0中是不需要的,示例执行)

Cake.DotNetTool.Module

如下面在使用指令处理器的示例中所要求的(注意:在Mono T4中已弃用,因此只能在VisualStudio版本的TextTransform.exe上完全使用),指令处理器当前未包装在dotnet cake .\t4.cake --bootstrap dotnet cake .\t4.cake 中,但是我们可以进行排序就像通过TextTransformSettings ToolSettings属性的任何Cake工具一样。

示例模板ArgumentCustomization

DirectiveTemplate.tt

示例Cake脚本,我们在此处使用VSW定位Visual Studio版本的<#@template language="c#" hostspecific="true"#> Hello <#= this.Host.ResolveParameterValue("", "", "greet") #>! ,使用Cake工具分辨率注册路径,并通过自定义参数传递指令参数。

TextTransform.exe

#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
© www.soinside.com 2019 - 2024. All rights reserved.