2012-03-20 24 views
3

我正在研究一个小型的Visual Studio扩展,该扩展对基于解决方案的项目起作用,如果它们设置为在活动构建配置中构建或不构建。我遇到的问题是我无法弄清楚如何确定这些项目是什么。如何获取要在活动的Visual Studio配置中构建的项目?

我实施了IVsUpdateSolutionEvents,其中我执行OnActiveProjectCfgChange。当我更改配置时,我可以让Visual Studio进入代码块,并且我已经能够完成许多我想要做的事情,但是无法确定应该在活动中构建哪些项目配置,我死在水中。

我实现迄今:

public int OnActiveProjectCfgChange(IVsHierarchy pIVsHierarchy) 
{ 

    var activeProjects = new HashSet<string>(); // TODO: Get projects in active configuration 
    foreach (Project project in _dte.Solution.Projects) 
    { 
     if (project.Kind != "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}" // C# 
      && project.Kind != "{F184B08F-C81C-45F6-A57F-5ABD9991F28F}" // VB 
      && project.Kind != "{13B7A3EE-4614-11D3-9BC7-00C04F79DE25}" // VSA 
      ) 
      continue; 

     IVsHierarchy projectHierarchy; 
     _solutionService.GetProjectOfUniqueName(project.UniqueName, out projectHierarchy); 
     if (activeProjects.Contains(project.UniqueName)) 
     { 
      // Project is to be built 
     } 
     else 
     { 
      // Project is not to be built 
     } 

     return VSConstants.S_OK; 
    } 
} 

我需要做的是找出如何在HashSet在函数的开始填写。 (标记为TODO)。我已经搜索和搜索,但我没有找到我需要的。

有没有人提及可能会帮助我前进的文档或示例代码?

回答

2

可以使用SolutionContext.ShouldBuild财产

foreach (SolutionContext solutionContext in _applicationObject.Solution.SolutionBuild.ActiveConfiguration.SolutionContexts) 
{ 
    if (solutionContext.ShouldBuild) 
     activeProjects.Add(solutionContext.ProjectName); 
    } 
+0

这主要作品!尝试检查卸载项目的状态时出现ArgumentException,但我可以解决此问题。谢谢! – 2012-03-20 19:20:19

相关问题