当包含多个TT文件时,T4模板调试器显示不正确的行

时间:2011-10-24 09:00:39

标签: c# asp.net visual-studio-2010 t4

我正在尝试使用VS2010 professional,Windows 7调试以下T4模板文件。

但是调试器没有突出显示文件中的正确行:“Texttemplate2.tt”

文件1:File1.tt

<#@ template debug="true" hostspecific="true" language="C#" #>

<#@ include file="Texttemplate2.tt"  #>

<#

System.Diagnostics.Debugger.Launch();


    int a= 10;

    Write("ASS");

    GetProperty("User","UserName");

#>

文件:Texttemplate2.tt

<#@ template debug="true" hostspecific="true" language="C#" #>
<#@ assembly name="System.Xml" #>
<#@ import namespace="System.Xml" #>
<#@ import namespace="System.IO" #>
<#+

 public void Load()
    {
        string doc=null;
        if(doc == null)
        {
            string templateDirectory = Path.GetDirectoryName(Host.TemplateFile);
            string absolutePath = Path.Combine(templateDirectory,"../../App_Data/EntityUI_MetaData_Appsettings.xml");
        }
    }
 public string GetProperty(string Entity, string prop)
    {
         Load();
         string node="none";

         if (node != "0" )
         {
            if (node == Entity )
              {
                return node;
              }
         }
        return null;
    }
 #>

让我详细解释一下这个问题。我创建了上面两个T4模板文件。现在我想调试我的T4模板文件“File1.tt”代码(不是生成的代码)。我做了什么我用

启动了调试器
System.Diagnostics.Debugger.Launch();

并设置断点

int a= 10;

。现在按F5导致我的断点被击中。

int a= 10;

现在突出显示黄色颜色为BACKGOUND和黄色箭头,如左图所示。此后按F11直到你到达

GetProperty

当调用此方法时,您会注意到黄色箭头表示当前正在执行的语句未突出显示。

Meant,supppose Line:20是下一个执行语句,调试器高亮显示行:texttemplatefile2.tt中的10

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。我还没有办法让这条线变得正确。但是,我发现你可以添加

    class Program
    {
        static void Main(string[] args)
        {
            var rawData = new string[]{
                 "Pansy_Parkinson",
                 "42",
                 "21",
                 "18",
                 "19",
                 "9",
                 "Dean_Thomas",
                 "40",
                 "10",
                 "35",
                 "22",
                 "4"
            };

            var Cards = new List<Card>();

            for(int i = 0; i < rawData.Length; i+=6)
            {
                var card = new Card(rawData[0 + i], rawData[1 + i].ToInt(), rawData[2 + i].ToInt(), rawData[3 + i].ToInt(), rawData[4 + i].ToInt(), rawData[5 + i].ToInt());
                Cards.Add(card);
            }
        }
    }

    public static class StringExtensions
    {
        public static int ToInt(this string item)
        {
            return Convert.ToInt32(item);
        }
    }

    public class Card
    {
        private string Name;
        private int Magic;
        private int Cunning;
        private int Courage;
        private int Wisdom;
        private int Temper;

        public Card(string name, int magic, int cunning, int courage, int wisdom, int temper)
        {
            Name = name;
            Magic = magic;
            Cunning = cunning;
            Courage = courage;
            Wisdom = wisdom;
            Temper = temper;
        }
    }

在要测试的行上,然后调试T4模板。你的IDE仍然会出错,但是如果你去代码中触发中断的地方 - 中断应该 - 你至少可以检查变量。< / p>

警告:如果您尝试使用调试器行保存或运行模板,则有时会导致Visual Studio崩溃。当你不使用时立即注释掉它。