T4代码生成脚本从添加注释,添加命名空间开始(一款强大的代码生成工具从看懂脚本,到随心所欲的玩弄代码,本文只是T4的冰山一角,博主将不断深入探索并完善该文章)

  1. 读懂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)
            : "";
    }
View Code

 1.3. 看懂属性的代码对应的代码:<#=codeStringGenerator.Property(edmProperty)#>

替换前:

        foreach (var edmProperty in simpleProperties)
        {
#>
    <#=codeStringGenerator.Property(edmProperty)#>
View Code

替换后:

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)#>
View Code

 1.4. 看懂命名空间namespace对应的代码:namespace <#=code.EscapeNamespace(codeNamespace)#>

猜你喜欢

转载自www.cnblogs.com/-hao/p/9232383.html