gpt4 book ai didi

c# - 具有多个文件输出的 T4 嵌套模板

转载 作者:行者123 更新时间:2023-11-30 14:31:42 25 4
gpt4 key购买 nike

我有一个模板,它从数据库中读取需要生成的表和对象。没有问题,模板确实在 cs 文件中单独生成相关文件(很棒)我使用 TemplateFileManager2.1 来实现这一点。在表循环中,我想调用另一个模板来使用循环中的表名创建该表所需的接口(interface),并将该接口(interface)放在另一个文件中。

foreach (var table in tables)
{
if(table.name !="sysdiagrams")
{
var manager2 = TemplateFileManager.Create(this);
manager2.StartNewFile(table.name+"mm.cs","Generator","Deneme");
InterfaceGeneratora(table.name);
manager2.Process();
manager2=null;


manager.StartNewFile(table.name+".cs","Generator","GeneratedTables");

这里 manager 对象用于输出表类,manager2 用于接口(interface)。这里的重点是调用 manager2 和 InterfaceGeneratora(table.name);运行 manager2 开始用新表接口(interface)替换创建的表接口(interface),最后我已经很好地创建了所有表类,但我手头只有最后一个表接口(interface)。任何帮助表示赞赏。

最佳答案

据我所知,模板文件管理器会替换所有先前在 .Process() 方法上生成的输出文件。因此,您应该在模板的最后调用 .Process() 方法。

为了“外包”生成接口(interface)文件的代码,您可以选择

  1. 在同一个模板中使用一个方法

    foreach(var table in tables)
    {
    if (table.name != "sysdiagrams")
    {
    manager.StartNewFile(table.name+"mm.cs", ...);
    // create interface code
    }

    manager.StartNewFile(table.name, ...);
    // create object code
    }
    manager.Process();
  2. 使用可包含的模板,该模板包含通过<#@include #> 指令生成接口(interface)代码的方法

    <#@ include file="interfaces.ttinclude" #>
    foreach(var table in tables)
    {
    if (table.name != "sysdiagrams")
    Interfacegeneratora(table.Name, manager);

    // generate object code
    manager.StartNewFile(table.name, ...);
    // generate object code here
    }
    manager.Process();

    文件“interfaces.ttinclude”包含类似的内容

    <#+ void Interfacegeneratora(string tableName, TemplateFileManager manager)
    {
    manager.StartNewFile(tableName + "mm.cs", ...);
    // generate interface code
    }
    #>
  3. 手动处理另一个模板

    foreach(var table in tables)
    {
    if (table.name != "sysdiagrams")
    {
    var InterfaceT4 = new InterfaceTemplate();
    InterfaceT4.Session = new Dictionary<string, object>();
    InterfaceT4.Session.Add("tableName", table.name);
    InterfaceT4.Session.Add("manager", manager);
    InterfaceT4.InitializeSession();
    InterfaceT4.ProcessTemplate();
    }

    manager.StartNewFile(table.Name, ...);
    // generate object code
    }
    manager.Process();

    在其中创建另一个 T4 模板,名为“InterfaceTemplate.tt”,这是一个预处理模板。这实现了与 .ttinclude 文件相同的代码。

注意:代码没有经过双重检查,但显示了它的主要工作原理。

希望对你有帮助,妮可

关于c# - 具有多个文件输出的 T4 嵌套模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19564689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com