edd*_*oll 6 c# code-generation visual-studio 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; }
<#
}
}
}
#>
Run Code Online (Sandbox Code Playgroud)
输出的样本是:
public class TestResult_DTO
{
public System.__ComObject TestType { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我接近有效输出,它只是我正在努力访问的属性的类型.
看看文档,我怀疑你想要AsString而不是ToString().那会叫CodeTypeRef.AsString:
AsString返回所建模语言中CodeTypeRef的字符串表示形式.例如,如果vsCMTypeRef类型是vsCMTypeRefInt,则字符串对于Visual C#为"Int",对于Visual Basic为"Long".
我自己从来没有写过这种代码,所以我只是按文档编写,但值得一试:)
| 归档时间: |
|
| 查看次数: |
1327 次 |
| 最近记录: |