- 读懂T4脚本的关键代码对于修改T脚本有非常大的帮助
1.1. 看懂类对应的代码:<#=codeStringGenerator.EntityClassOpening(entity)#>
给类添加注释,替换
WriteHeader(codeStringGenerator, fileManager);
和
<#=codeStringGenerator.EntityClassOpening(entity)#>
之间的代码
WriteHeader(codeStringGenerator, fileManager);
string summary=string.Empty;
foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))
{
fileManager.StartNewFile(entity.Name + ".cs");
BeginNamespace(code);
if(entity.Documentation !=null && entity.Documentation.Summary!=null)
summary=entity.Documentation.Summary;
else
summary=entity.Name;
#>
<#=codeStringGenerator.UsingDirectives(inHeader: false)#>
/// <summary>
/// <#=summary#>
/// </summary>
<#=codeStringGenerator.EntityClassOpening(entity)#>
1.2. 看懂引用的命名空间对应的代码:<#=codeStringGenerator.UsingDirectives(inHeader: false)#>
该方法实现与于odeStringGenerator类下边。代码如下:
public string UsingDirectives(bool inHeader, bool includeCollections = true) { return inHeader == string.IsNullOrEmpty(_code.VsNamespaceSuggestion()) ? string.Format( CultureInfo.InvariantCulture, "{0}using System;{1}" + "{2}"+"{3}", inHeader ? Environment.NewLine : "", includeCollections ? (Environment.NewLine + "using System.Collections.Generic;") : "", includeCollections ? (Environment.NewLine + "using System.Data;") : "", inHeader ? "" : Environment.NewLine) : ""; }
1.3. 看懂属性的代码对应的代码:<#=codeStringGenerator.Property(edmProperty)#>
替换前:
foreach (var edmProperty in simpleProperties) { #> <#=codeStringGenerator.Property(edmProperty)#>
替换后:
foreach (var edmProperty in simpleProperties) { if (edmProperty.Documentation != null && edmProperty.Documentation.Summary != null) { summary=edmProperty.Documentation.Summary; } else { summary=""; } #> /// <summary> /// <#=summary#> /// </summary> <#=codeStringGenerator.Property(edmProperty)#>
1.4. 看懂命名空间namespace对应的代码:namespace <#=code.EscapeNamespace(codeNamespace)#>