如何仅在t4生成器中不存在输出文件的情况下创建输出文件

本文关键字:文件 输出 不存在 创建 情况下 何仅 t4 | 更新日期: 2023-09-27 18:00:20

我有一个T4生成器,如下所示:

<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF6.Utility.CS.ttinclude"#>
<#@ import namespace="System.IO" #><#@ 
 output extension=".cs"#>
<#foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))
{
    var fileName = entity.Name + "Controller.cs";
    fileManager.StartNewFile(fileName);
}#>

我不想T4生成器删除我的修改,所以我需要在文件存在期间停止生成,这怎么可能?

如何仅在t4生成器中不存在输出文件的情况下创建输出文件

您可以使用函数DoesFileExist并在创建新文件时进行检查。如果它已经存在,那么您可以使用OutputFile 写入相同的文本(现有文件)

// Check for file existence
bool DoesFileExist(string filename)
{            
    return File.Exists(Path.Combine(GetCurrentDirectory(),filename));    
}
// Get current  folder directory
string GetCurrentDirectory()
{
    return System.IO.Path.GetDirectoryName(Host.TemplateFile);
}
// Get content of file name
string OutputFile(string filename)
{
    using(StreamReader sr = 
      new StreamReader(Path.Combine(GetCurrentDirectory(),filename)))
    {
        return sr.ReadToEnd();
    }
}

写入相同的文件:

// Write with original file
fileManager.StartNewFile(fileName);
this.Write(OutputFile(fileName));

您可以参考此示例EDMX文件中的元数据类或数据注释