我正在研究一些 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(使用前将#替换为@)