从 CodeAttribute 内的参数获取 CodeClass?

2024-04-09

我正在研究一些 T4 代码生成,为此我需要在 BarAttribute 构造函数内传递的类型的 CodeClass。

class Baz { }
class Bar : Attribute { public Bar (Type type) {    } }

[Bar(typeof(Baz))]
public class Foo
{
}

这是我到目前为止在 T4 模板中所拥有的内容,我只是将 CodeAttribute '[Bar(typeof(Baz))]' 赋予该函数:

private CodeClass GetType(CodeElement codeElement)
{
    CodeAttribute attribute = (CodeAttribute)codeElement;
    if (attribute.Name == "Bar")
    {
        foreach (CodeElement child in attribute.Children)
        {
            EnvDTE80.CodeAttributeArgument attributeArg = (EnvDTE80.CodeAttributeArgument)child;
            WriteLine(attributeArg.Value);
        }
    }

    return null;
}

该函数现在将只写: typeof(Baz),如何获取 Baz 的 CodeClass(可以位于解决方案中的另一个程序集内),而无需迭代所有项目、ProjectItems、CodeElements 等?


As per William https://stackoverflow.com/users/1721649/william的回复,您仅限于设计时信息,该信息将是传递给属性的未解析文本。如果您有兴趣查找中引用的 CodeClasstypeof关键字而不诉诸递归,您可以使用VisualStudioAutomationHelper类发现于有形的 T4 编辑器 http://t4-editor.tangible-engineering.com/T4-Editor-Visual-T4-Editing.html模板库。你像这样使用它:

var project = VisualStudioHelper.CurrentProject;

var allClasses = VisualStudioHelper.GetAllCodeElementsOfType(project.CodeModel.CodeElements, EnvDTE.vsCMElement.vsCMElementClass, false);

allClasses.Cast<EnvDTE.CodeClass>().Single(x => x.Name == searchedClassName);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 CodeAttribute 内的参数获取 CodeClass? 的相关文章

随机推荐