T4生成一个额外的空文件

时间:2016-09-28 15:06:41

标签: c# t4

我正在VS 2015中编写一个T4模板来生成一些C#存储库类。该模板运行良好,并为我提供了我们想要的每个类.gen.cs。但它也会产生一个空白的.cs。 我正试图弄清楚如何让它不生成额外的.cs文件。

所以,如果我有OrderRepositories.tt,我会得到:
OrderRepository.gen.cs
OrderItemRepository.gen.cs
OrderRepositories.cs - 除非模板错误

,否则此文件为空

如何跳过那个空的.cs文件? (如果我在下面没有提供足够的信息,请发表评论。)

这是.tt文件的include部分:

<#@ template language="C#" debug="True" #>
<#@ include file="T4Toolbox.tt" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Reflection" #>

这是.tt文件中的主要方法:

public void RunTemplate()
{
    var types = GetTypesInNamespace(assembly, nameSpace);

    foreach (var type in types) {
        var fileName = string.Format(@"{0}Repository.gen.cs", type.Name);
        var name = type.Name;
        var repoTemplate = new RepositoryTemplate(fileName, repositoryNamespace, type.Namespace, name, dbContextName, dbContextNamespace, type);
        repoTemplate.RenderToFile(fileName);
    }
}

.tt文件的模板部分:

<#+
private class RepositoryTemplate : Template {

    public RepositoryTemplate(string fileName, string repoNameSpace, string typeNameSpace, string name, string dbContextName, string dbContextNamespace, Type thisType)
    {
        _fileName = fileName;
        _repoNameSpace = repoNameSpace;
        // ...
    }

    public override string TransformText()
    {
using System;
using System.Data;

namespace <#= _repoNameSpace #> 
{
    public partial interface I<#= _name #>Repository : IBaseRepository<<#= _name #>> 
    {
    }

    public partial class <#= _name #>Repository : BaseRepository<<#= _name #>>, I<#= _name #>Repository 
    {
        public <#= _name #>Repository() : base("Order")
        {            
        }

        // ... other code
    }
}
        <#+
        return this.GenerationEnvironment.ToString();
    }
}#>

0 个答案:

没有答案