문제

비주얼 스튜디오 솔루션에서 모든 파일을 추적 해야하는 Visual Studio 용 추가 기능을 작성하려고합니다. 구독 해야하는 이벤트를 알고 있습니다 (솔루션이 열렸을 때 파일이 추가/제거/편집 될 때 프로젝트에 대해 동일)하지만 실제로 파일 목록을 얻는 방법을 이해하지 못합니다. 그것으로부터.

나는 최근에 Coderush를 설치하고 DXCore 프레임 워크를 사용하고 있습니다. 플러그인의 접근 방식에 매우 만족하지만 솔루션에서 파일 목록을 얻는 명백한 방법은 없습니다.

요약하려면 : Visual Studio SDK를 통해 어떻게 또는 DXCORE, 솔루션에서 안정적인 파일 목록을 얻습니까?

도움이 되었습니까?

해결책

이것은 Visual Studio SDK에서 DTE를 사용하여 쉽게 사용할 수 있습니다.

당신은 프로젝트 상호 작용.

당신은 ProjectItem 상호 작용.

자세한 내용은 읽는 것이 좋습니다 프로젝트 및 솔루션 제어.

다른 팁

감사합니다, 리드; 당신이 연결 한 기사는 몇 분 안에 개념 증명을 얻을 수있을 정도로 나를 충분히 얻었습니다.

나는 그것이 관련되어 있다고 생각하기 때문에, 여기에 프로젝트를 수집 한 반복과 재귀 수단이 있습니다. 나는 dxcore에서 이것을했지만, 같은 아이디어는 Raw Visual Studio SDK에 적용됩니다 (dxcore는 SDK보다 더 멋진 래퍼입니다). '솔루션', '프로젝트', '프로젝트'및 'ProjectItem'객체는 바로 Envdte에 있습니다.

프로젝트 설정

EnvDTE.Solution solution = CodeRush.ApplicationObject.Solution;
EnvDTE.Projects projects = solution.Projects;

ProjectItems를 끌어 내기 위해 프로젝트를 반복합니다

var projects = myProjects.GetEnumerator();
while (projects.MoveNext())
{
    var items = ((Project)projects.Current).ProjectItems.GetEnumerator();
    while (items.MoveNext())
    {
        var item = (ProjectItem)items.Current;
        //Recursion to get all ProjectItems
        projectItems.Add(GetFiles(item));
    }
}

마지막으로, 활성 솔루션에서 모든 ProjectItems를 가져 오기 위해 재귀

ProjectItem GetFiles(ProjectItem item)
{
    //base case
    if (item.ProjectItems == null)
        return item;

    var items = item.ProjectItems.GetEnumerator();
    while (items.MoveNext())
    {
        var currentItem = (ProjectItem)items.Current;
        projectItems.Add(GetFiles(currentItem));
    }

    return item;
}

보다 Envdte : 모든 프로젝트 받기 (Solutionfolder Pita)

이 솔루션은 프로젝트가 하위 폴더에 있더라도 솔루션의 모든 프로젝트를 해결하기 위해 훌륭하게 작동합니다.

필수 수정 사항을 지적하고 원래 코드 대신 DTE2를 가져 오는 데 사용하거나 Visual Studio의 올바른 인스턴스를 얻지 못하는 코드 아래의 주석을 읽으십시오.

DTE2 dte2 = Package.GetGlobalService(typeof(DTE)) as DTE2;

(코드는 위의 수정을 포함하도록 업데이트되었습니다)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top