从 cli 运行 t4 预处理模板

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

当我右键单击 .tt 文件并从 Visual Studio 2022 中选择“运行自定义工具”时,.cs 输出文件会完美生成,但是当我尝试从 Powershell CLI 运行 TextTransform.exe 或 TextTransformCore.exe 时,转换失败并出现以下错误:

错误CS0103:编译转换:当前上下文中不存在名称“s_data”

但是名称 s_data 是在与模板匹配的部分类中声明的,并且在使用 VS“运行自定义工具”选项运行时可以很好地识别。

SideNavTemplate.tt 文件中的代码:

<#@ template language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>


<ul class="side_nav">

    <# foreach (MenuItem sideItem in s_data) { #>
        ...
    <# } #>

</ul>

部分类中的代码:

using System.Xml.Linq;

namespace Excelerator.Models;

partial class SideNavTemplate
{
    private List<MenuItem> s_data;
    public SideNavTemplate(List<MenuItem> data) { s_data = data; }
}

public class MenuItem
{
    public string label { get; set; }
    public string route { get; set; }
    public List<MenuItem> subMenu { get; set; }
    public List<MenuItem> sideData { get; set; }
    public FormItem form {  get; set; }
    public string role { get; set; }
}

public class FormItem
{
    public string name { get; set; }
}

尝试从两个文件所在的目录调用 TextTransform.exe,但很遗憾它无法识别 s_data 属性。

.tt 文件的自定义工具属性是

TextTemplatingFilePreprocessor

任何让其运行的帮助将不胜感激。

c# visual-studio blazor-server-side t4
1个回答
0
投票

有一个可能的解决方案这里

另一种方法是将部分类包含在 .ttinclude 文件中并生成它们。

如果您需要在构建事件之前生成T4文件,您可以考虑使用T4Executer

© www.soinside.com 2019 - 2024. All rights reserved.