如何使用envDTE命名空间获取T4中基类的属性?

时间:2016-11-22 14:45:06

标签: t4 envdte tangible-t4-editor

我已经创建了这个问题,解释了我作为参考的步骤,因为我的搜索花了很长时间才知道在哪里以及如何找到这个解决方案。

我在我的业务逻辑项目中创建了一个T4模板,用于创建基于现有类的一些类以及放置我的T4模板的其他项目(相同的解决方案)。我已经从有形的模板库中加载了VisualStudioHelper。这有助于从我的Entity-Project中获取实体类。

Project targetProject= VisualStudioHelper.GetProject("ProjectName");

从那里我得到了我的课程:

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

CodeClass targetClass= allClasses
        .Cast<CodeClass>()
        .Where(p => p.Name == "ClassName")
        .Single();

现在我的课程可以查询我的属性:

var allProperties = VisualStudioHelper.CodeModel.GetAllCodeElementsOfType(targetClass.Members, EnvDTE.vsCMElement.vsCMElementProperty, true);

我发现(很明显)基类的属性没有被注册为目标CodeClass元素的属性。

有人可以帮我查询我的T4模板的基类属性。

正如所解释的那样T4在我的业务逻辑层(BLL)中,目标实体类位于一个共同的Entity项目中,因为我使用的是EF-CodeFirst,其中我的实体在我的BLL中与在我的DAL中完全相同。基类来自一个公共库项目(Nuget),我自己编写了包含我在使用EF-CodeFirst时使用的每个实体的属性。

Software Layering

希望有人可以帮助我。

亲切的问候, Luuk Krijnen

1 个答案:

答案 0 :(得分:0)

我看到你有VisualStudioHelper,你可能需要添加一个像GetAllMethods这样的方法。

这是我的代码:

#getQuote