T4迭代解决方案文件夹中的项目

时间:2018-05-18 12:56:31

标签: visual-studio project t4 solution

我有一个T4模板,可以为我的api-contract生成流畅的构建器类。因此,当我有一个具有名称和名字的合同CreatePersonRequest时,我生成一个CreatePersonRequestBuilder来创建CreatePersonRequest。

这样我的构建器始终是最新的,通过继承其中一个,我可以轻松地制作各种预先填充的对象,语法很好。

当我的项目都位于我的解决方案的根目录中时,这可以正常工作。一旦我开始添加一些解决方案文件夹,这就不再适用了。

public EnvDTE.Project GetProjectByName(string projectName) {

    var serviceProvider = (IServiceProvider)this.Host;

    var dte = (EnvDTE.DTE)serviceProvider.GetService(typeof(EnvDTE.DTE));



    var solution = dte.Solution;

    foreach (Project p in solution.Projects)

    {

        if (p != null) {

            if (p.Name == projectName){

                return p;

            }

        }

    }



    return null;

}

我在开始时从我的解决方案中检索所有项目,然后迭代这些项目并验证名称。显然是“' project'这里也可以表示解决方案文件夹。

我想的很容易解决。检查项目的类型(可以是项目/文件夹/ ....),如果文件夹更深入ProjectItems层次结构。

我现在遇到的问题是我有一个ProjectItem,它是一个接口(并没有由Project实现)。所以我无法将这个ProjectItem转换为Project(尽管ProjectItem.Kind属性告诉我它是一个Project)。

如何更深入地检索解决方案层次结构中的项目?

0 个答案:

没有答案