从T4模板中的CodeProperty中检索属性类型

时间:2014-03-03 07:16:52

标签: c# visual-studio code-generation envdte

我正在使用T4实现一些相当直接的代码生成,但是当涉及到属性生成的细节时,我仍然遇到了一个基本问题。当我访问我想要生成的CodeProperty对象的Type属性时,它们返回'System .__ ComObject'而不是属性的实际类型。

我正在使用EnvDTE查找项目中包含我的自定义属性的所有类。我用它来标记某些代码生成类。到现在为止还挺好。然后我踩过我班级的所有CodeElement对象。我可以找到所有属性,只是我无法得到它们的“类型”。

这是我的T4的片段:

public class <#= cls.Name #>_DTO
{
<#
    foreach (CodeElement child in cls.Children)
    {
        if (child.Kind == vsCMElement.vsCMElementProperty)
        {
            var prop = child as CodeProperty;
#>

    public <#= prop.Type.ToString() + " " + child.Name #> { get; set; }

<#
    }
  }
}
#>

输出的样本是:

public class TestResult_DTO
{
    public System.__ComObject TestType { get; set; }
}

正如您所看到的,我接近有效输出,它只是我正在努力访问的属性的类型。

1 个答案:

答案 0 :(得分:8)

查看文档,我怀疑您需要AsString而不是ToString()。那会叫CodeTypeRef.AsString

  

AsString以正在建模的语言返回CodeTypeRef的字符串表示形式。例如,如果vsCMTypeRef类型是vsCMTypeRefInt,则字符串对于Visual C#为“Int”,对于Visual Basic为“Long”。

我自己从未编写过这类代码,所以我只是按文档编写,但值得一试:)