T4。错误:表达式块计算为Null

时间:2013-04-18 14:18:06

标签: c# .net code-generation t4

我添加了看起来像这样的template.tt文件:

<#@ template language="C#" debug="true" #>
<#@ output extension=".cs" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Collections.Generic" #>

using System;
using System.Collections.Generic;

namespace Test
{
    public class <#= this.ClassName#>
    {       

    }
}

<#+
    public string ClassName { get; set; }
#>

我收到错误:

An expression block evaluated as Null
at Microsoft.VisualStudio.TextTemplating.ToStringHelper.ToStringWithCulture(Object objectToConvert)...

我应该怎么做以避免看到这些消息?

提前致谢

2 个答案:

答案 0 :(得分:4)

问题是ClassName属性为null。解决错误的一种方法是将类功能块中的代码更改为:

<#+
    private string className = "";

    public string ClassName {
        get { return className; }
        set { className = value; }
    }
#>

答案 1 :(得分:3)

我认为,您希望生成类似

的内容
using System;
using System.Collections.Generic;

namespace Test
{
    public class MyClass
    {       

    }
}

代码中的问题是在表达式块中,您正在考虑类功能块中不存在的变量<#= this.ClassName#>。修改代码如下。

<#@ template language="C#" debug="true" #>
<#@ output extension=".cs" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Collections.Generic" #>

using System;
using System.Collections.Generic;

namespace Test
{
    public class <#= this.ClassName #> //Expression Block
    {       
    }
}

<#+ //Class feature block
    public string ClassName = "MyClass";
#>