0

마법사를 사용하여 Visual Studio (C++) 프로젝트 템플릿에서 필터 (프로젝트에서 파일을 별도로 처리하는 작은 폴더 중 하나)를 만들려고합니다. RunStarted 메서드에 다음 코드를 작성하십시오.Visual Studio 템플릿에 필터 추가

public void RunStarted(object automationObject, 
     Dictionary<string, string> replacementsDictionary, 
     WizardRunKind runKind, object[] customParams) 
    { 
     try 
     { 
     // Add filters to the project 
     EnvDTE.DTE dte = (EnvDTE.DTE)automationObject; 

     Array activeProjects = (Array)dte.ActiveSolutionProjects; 
     Project activeProj = (Project)activeProjects.GetValue(0); 
     VCProject prj = (VCProject)activeProj.ProjectItems.Item(0); 
     VCFilter filter = prj.AddFilter("Header_Files"); 
     filter.AddFile("header.h"); 
     prj.Save(); 
     } 
     catch (Exception ex) 
     { 
     MessageBox.Show(ex.ToString()); 
     } 
    } 

이 경우에도 오류가 발생합니다. 반환 된 오류는 다음과 같습니다.

System.IndexOutOfRangeException : 인덱스가 배열의 경계를 벗어났습니다.

System.Array.InternalGetReference에서

(무효 * elemRef, INT32 순위, INT32 * pIndices) System.Array.GetValue (INT32 지수) my_wizard.IMyWizard.RunStarted에서

에서

(automationObject 객체 , Dictionary`2 replacementsDictionary, WizardRunKind runKind는 어디에서 잘못 얻고

) [] customParams 객체? vs 템플릿에 필터를 어떻게 추가합니까?

답변

1

대답 here을 찾을 수 있습니다.
일부 사용자는 솔루션 탐색기가 열려 있지 않을 때 문제가 발생한다고 말합니다.
내 솔루션은 상위 링크를 기반으로합니다 :

private Project getActiveProject(DTE2 dte) 
    { 
     Array projects = dte.ActiveSolutionProjects as Array; 
     if (projects == null || projects.Length == 0) 
     { 
      projects = dte.Solution.SolutionBuild.StartupProjects as Array; 
      if (projects == null || projects.Length == 0) 
      { 
       Projects pro = dte.Solution.Projects; 
       if (pro == null || pro.Count == 0) 
        return null; 
       return pro.Item(0); 
      } 
     } 
     return projects.GetValue(0) as Project; 
    } 
관련 문제