C# 从T4模板中的CodeProperty检索属性类型
我使用T4实现了一些相当直接的代码生成,但是当涉及到属性生成的细节时,我遇到了一个基本问题。当我访问要生成的CodeProperty对象的Type属性时,它们返回的是“System.\uu ComObject”,而不是属性的实际类型 我使用EnvDTE查找项目中包含自定义属性的所有类。我用它来标记代码生成的某些类。到现在为止,一直都还不错。然后,我将遍历所有属于我的类的子类的CodeElement对象。我可以找到所有的属性,只是我不能得到它们的“类型” 以下是我的T4的一个片段:C# 从T4模板中的CodeProperty检索属性类型,c#,visual-studio,code-generation,envdte,C#,Visual Studio,Code Generation,Envdte,我使用T4实现了一些相当直接的代码生成,但是当涉及到属性生成的细节时,我遇到了一个基本问题。当我访问要生成的CodeProperty对象的Type属性时,它们返回的是“System.\uu ComObject”,而不是属性的实际类型 我使用EnvDTE查找项目中包含自定义属性的所有类。我用它来标记代码生成的某些类。到现在为止,一直都还不错。然后,我将遍历所有属于我的类的子类的CodeElement对象。我可以找到所有的属性,只是我不能得到它们的“类型” 以下是我的T4的一个片段: public
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; }
<#
}
}
}
#>
如您所见,我已接近有效输出,这正是我正在努力访问的属性类型。查看文档,我怀疑您希望AsString
而不是ToString()
。这将要求:
AsString以建模语言返回CodeTypeRef的字符串表示形式。例如,如果vsCMTypeRef类型是vsCMTypeRefInt,那么对于Visual C,字符串将是“Int”,对于Visual Basic,字符串将是“Long”
我自己从来没有写过这样的代码,所以我只是浏览一下文档,但值得一试:)成功了:)EnvDTE显然是一个有用的工具,它打开了很多东西,但它不是最直观的库。我也帮了忙!一个小提示:AsString是一个属性而不是一个方法。
public class TestResult_DTO
{
public System.__ComObject TestType { get; set; }
}