因此,tt模板将在您保存时重新生成每个文件。现在,很棒,它会生成文件。但是,我正在制作部分类来扩展其他类,但我只需要生成不存在的文件。那些存在的,我想保留。到目前为止,我发现在全球范围内找不到一个可靠的解决方案......
在我的下面的代码中,查找现有文件的例外并不重要,因为模板将首先删除所有文件。然后它再生。
我可以覆盖像“onsave”这样的方法吗?
// BEGIN CODE TO GENERATE EXTENSIONS
<#
foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
{
string fileName = entity.Name + ".Extension.cs";
string filePath = this.Host.TemplateFile.Substring(0,this.Host.TemplateFile.LastIndexOf(@"\"));
filePath = filePath + @"\Extensions\" + fileName;
if((File.Exists(filePath) && PreserveExistingExtensions == false) || !File.Exists(filePath))
{
fileManager.StartNewFile(fileName);
BeginNamespace(namespaceName, code);
bool entityHasNullableFKs = entity.NavigationProperties.Any(np => np.GetDependentProperties().Any(p=>ef.IsNullable(p)));
#>
<#=Accessibility.ForType(entity)#>
<#=code.SpaceAfter(code.AbstractOption(entity))#>partial class
<#=code.Escape(entity)#><#=code.StringBefore(" : ", code.Escape(entity.BaseType))#>
{
}
<#
EndNamespace(namespaceName);
}
}
fileManager.Process();
#>
答案 0 :(得分:2)
我做类似的事情(部分类),其中我有一个总是生成的,但只有在不存在的情况下才会生成自定义类。第二个创建为自定义的起始类。我会像这样输出两个文件:
永远不会重新创建MyClass.cs,除非它不存在。将始终重新创建MyClass.generated.cs。
我使用T4toolbox来做这件事,Oleg Sych实际上很容易做到这一点。
您可以查看我构建的一些示例T4模板here。具体来看this one,这是生成的部分类的一个很好的例子,每次都需要创建一个,只有在不存在时才创建一个。
要注意的主要问题是代码中的这一行:
var requestBaseMessageCustom = new MessageTemplate(rootNamespace, serviceName + "Request");
requestBaseMessageCustom.Output.File = "Messages/" + serviceName + "Request.cs";
requestBaseMessageCustom.Output.PreserveExistingFile = true;
requestBaseMessageCustom.Render();
注意名为PreserveExistingFile
的属性,这是关键。