2012-03-20 12 views
3

私は、アクティブなビルド構成でビルドするかどうかに基づいてソリューションのプロジェクトに作用する小さなVisual Studio拡張機能を開発しています。私が抱えている問題は、そのプロジェクトが何であるかを判断する方法がわからないことです。アクティブなVisual Studio構成でプロジェクトをビルドする方法を教えてください。

OnActiveProjectCfgChangeを実装するIVsUpdateSolutionEventsを実装しました。私は設定を変更するときに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が表示されますが、その問題を回避できます。ありがとう! –

関連する問題