我有一个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)。
如何更深入地检索解决方案层次结构中的项目?