【问题标题】:How to get properties of a baseclass in T4 using the envDTE namespace?如何使用 envDTE 命名空间获取 T4 中基类的属性?
【发布时间】:2016-11-22 14:45:05
【问题描述】:

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

我正在我的业务逻辑项目中创建一个 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) 中,目标实体类位于一个通用实体项目中,因为我使用了 EF-CodeFirst,其中我的 BLL 中的实体与 DAL 中的实体完全相同。基类来自我自己编写的公共库项目 (Nuget),其中包含我在使用 EF-CodeFirst 时使用的每个实体的属性。

希望有人可以帮助我。

亲切的问候, 卢克·克里宁

【问题讨论】:

    标签: t4 envdte tangible-t4-editor


    【解决方案1】:

    我看到你有 VisualStudioHelper,你可能需要在里面添加一个方法,比如 GetAllMethods。

    这是我的代码:

    public IEnumerable<EnvDTE.CodeProperty> GetAllProperties(EnvDTE.CodeClass codeClass)
    {
        var props = new List<EnvDTE.CodeProperty>();
    
        props.AddRange(GetProperties(codeClass));
        var baseClass = GetBaseClass(codeClass);
        if (baseClass != null)
            props.AddRange(GetAllProperties(baseClass));
    
        return props.Distinct(new CodePropertyEqualityComparer());
    }
    
    public IEnumerable<EnvDTE.CodeProperty> GetProperties(EnvDTE.CodeClass codeClass)
    {
        return GetAllCodeElementsOfType(codeClass.Members, EnvDTE.vsCMElement.vsCMElementProperty, true).OfType<EnvDTE.CodeProperty>();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-08
      • 1970-01-01
      • 1970-01-01
      • 2012-11-10
      • 2015-07-08
      • 1970-01-01
      • 2021-09-30
      • 1970-01-01
      相关资源
      最近更新 更多