C# 如何在VS 2012中从外接程序中查找启动项目
我为VS2012编写了一个插件。 在某个时刻,我需要找到一个和解决方案的启动项目相对应的项目对象。 我使用了数组_applicationObject.Solution.SolutionBuild.StartupProjects,它为我提供了启动项目的名称,然后我转到_applicationObject.Solution.Item projectName,它通常会返回一个好的项目对象。 我的解决方案与Microsoft推荐的类似 但如果startup project不在解决方案的顶层,那么就说有一个Sol1解决方案,在它下面有一个文件夹Demo,而startup project在Demo中,我的方法不起作用 _applicationObject.Solution.SolutionBuild.StartupProjects返回正确的名称,但项目集合不包含我的启动项目-它只包含演示顶级名称C# 如何在VS 2012中从外接程序中查找启动项目,c#,visual-studio-2012,add-in,C#,Visual Studio 2012,Add In,我为VS2012编写了一个插件。 在某个时刻,我需要找到一个和解决方案的启动项目相对应的项目对象。 我使用了数组_applicationObject.Solution.SolutionBuild.StartupProjects,它为我提供了启动项目的名称,然后我转到_applicationObject.Solution.Item projectName,它通常会返回一个好的项目对象。 我的解决方案与Microsoft推荐的类似 但如果startup project不在解决方案的顶层,那么就说有一
我希望有人能告诉我找到启动项目的正确方法要从启动对象名称转换为个人名称,我使用全名,您需要像这样递归遍历项目层次结构:
// REQUIRE(services->dte->Solution != nullptr);
std::vector<gcroot<EnvDTE::Project^>> VSServices::get_all_projects() const
{
REQUIRE(services->dte->Solution != nullptr);
std::vector<gcroot<EnvDTE::Project^>> result;
if (services->dte->Solution->Projects != nullptr)
{
for each(EnvDTE::Project^ project in services->dte->Solution->Projects)
get_all_projects_from_project(project, result);
}
return result;
}
void VSServices::get_all_projects_from_project(EnvDTE::Project^ project,
std::vector<gcroot<EnvDTE::Project^>>& result) const
{
if (project != nullptr)
{
result.push_back(project);
if (project->ProjectItems != nullptr)
{
for each(EnvDTE::ProjectItem^ item in project->ProjectItems)
{
if (item != nullptr)
get_all_projects_from_project(dynamic_cast<EnvDTE::Project^>(item->Object), result);
}
}
}
}