종속성 그래프를 사용하여 코드 전체에서 종속성 매핑

코드 간의 종속성을 파악하려는 경우 Visual Studio Ultimate를 사용하여 해당 코드를 매핑하면 됩니다. 모든 코드 간의 종속성을 파악하려는 경우 코드 맵을 만들어 해당 코드를 시각화합니다(Visual Studio Ultimate에만 해당됨). 그러면 전체 파일과 코드 줄을 확인하지 않고도 여러 코드가 서로 맞는지 파악할 수 있습니다.

선택한 항목 및 확장된 그룹이 있는 그래프

아래에는 이와 관련한 몇 가지 비디오가 나와 있습니다.

필요한 사항은 다음과 같습니다.

  • Visual Studio Ultimate 2013

  • 솔루션이나 어셈블리(.dll 또는 .exe)의 Visual C# .NET 또는 Visual Basic .NET 코드

  • Visual C++ 프로젝트의 네이티브 또는 관리되는 C/C++ 코드, 헤더 파일(.h 또는 #include) 또는 이진 파일

  • 다음 항목에서 종속성을 매핑하기 위한 Visual Studio 2013 업데이트 3

    • 여러 앱에서 코드를 공유하는 프로젝트

    • Microsoft Dynamics AX용 .NET 모듈의 X++ 프로젝트 및 어셈블리

    Windows 탐색기에서 기존 그래프로 어셈블리와 이진 파일을 끌어 색으로 구분된 관계를 가져올 수도 있습니다.

다음과 같이 시작할 수 있습니다.

  • 솔루션의 전체 종속성을 확인하려면 아키텍처 메뉴로 이동하여 종속성 그래프 생성, 솔루션용을 차례로 클릭합니다.

    또는

  • 솔루션의 특정 종속성을 확인하려면 솔루션 탐색기를 열고 원하는 프로젝트, 어셈블리 참조, 폴더, 파일, 형식 또는 멤버를 선택합니다. 그런 다음 솔루션 탐색기 도구 모음에서 새 그래프 문서 만들기 선택한 노드에서 새 그래프 만들기 단추를 클릭합니다.

또한 다음을 수행할 수 있습니다.

  • C 또는 C++ 소스 파일과 헤더 파일 간의 종속성 확인

  • 종속성 그래프 공유

  • 프로그래밍 방식으로 그래프 만들기

전체 종속성 확인

솔루션 전체의 종속성 확인

  1. 아키텍처 메뉴에서 종속성 그래프 생성, 솔루션용을 차례로 클릭합니다.

    최상위 수준 어셈블리와 어셈블리 간의 집계된 링크를 보여주는 그래프가 표시됩니다. 집계 링크의 범위가 넓을수록 해당 링크로 표시되는 종속성의 수도 많습니다. 외부 그룹은 플랫폼 종속성을 포함하여 사용자의 솔루션 외부에 있는 모든 것을 포함합니다. 외부 어셈블리에는 사용된 항목만 표시됩니다.

    어셈블리의 최상위 종속성 그래프

  2. 어셈블리 내부를 확인하려면 해당 어셈블리를 확장합니다. 어셈블리를 확장하려면 해당 어셈블리 위로 마우스 포인터를 이동한 다음 갈매기형(^) 펼침 단추가 나타나면 클릭합니다. (키보드: 항목을 선택한 다음 더하기 키(+)를 누릅니다.) 코드를 더 자세히 살펴보려면 네임스페이스, 형식 및 멤버에 대해 같은 작업을 수행합니다.

    그룹화된 노드가 있는 종속성 그래프

    기본적으로 포함 관계는 확장 및 축소할 수 있는 그룹으로 표시됩니다. 그룹 관계를 링크로 표시하려면 그래프 바로 가기 메뉴에서 그룹, 그룹화 해제를 차례로 클릭합니다.

    노드 및 링크가 있는 종속성 그래프

  3. 집계 링크로 표시되는 항목과 종속성을 검사하려면 먼저 링크를 선택한 후 바로 가기 메뉴를 엽니다. 표시를 클릭한 다음 현재 다이어그램에 링크를 적용하는 중 또는 새 다이어그램에 링크를 적용하는 중을 클릭합니다.

    그룹이 링크의 양 끝에서 확장되고 링크에 참여하는 항목 및 종속성만 표시됩니다.

  4. 항목 또는 링크에 대한 자세한 정보를 보려면 도구 설명이 나타날 때까지 포인터를 항목 위로 이동합니다. 그러면 링크가 나타내는 범주가 표시됩니다.

  5. 링크 색의 의미를 확인하려면 그래프 도구 모음에서 범례를 클릭합니다.

    녹색 링크가 표시된다고 해서 단순히 상속 관계만 있는 것은 아닙니다. 메서드 호출도 있을 수 있지만 해당 호출은 상속 관계에 의해 숨겨집니다.

  6. 그룹의 멤버 간 종속성을 보려면 그래프의 항목을 클릭합니다.

    선택한 항목 및 확장된 그룹이 있는 그래프

  7. 코드에서 발생할 수 있는 문제를 찾으려면 분석기를 실행합니다.

참조

어셈블리 또는 이진 파일 간의 종속성 확인

  • 빈 그래프를 만들거나 기존 그래프를 엽니다(.dgml 파일). 외부 Visual Studio에서 어셈블리 또는 이진 파일을 그래프로 끌어 옵니다.

    참고

    Windows 탐색기와 Visual Studio를 동일한 UAC(사용자 액세스 제어) 권한 수준에서 실행하는 경우에만 Windows 탐색기에서 어셈블리 또는 이진 파일을 끌어 올 수 있습니다.예를 들어, UAC가 설정되어 있고 Visual Studio를 관리자 권한으로 실행하는 경우 Windows 탐색기에서 끌기 작업이 차단됩니다.이 문제를 해결하려면 Visual Studio를 관리자 권한으로 실행하거나 UAC를 해제합니다.Windows 8에서 Windows 탐색기는 파일 탐색기입니다.

빈 그래프 만들기

  1. 솔루션 탐색기에서 최상위 솔루션 노드의 바로 가기 메뉴를 엽니다. 추가, 새 항목을 차례로 클릭합니다.

  2. 설치됨에서 일반을 클릭합니다.

  3. 오른쪽 창에서 방향이 지정된 그래프 문서를 클릭합니다.

    그러면 빈 그래프가 솔루션의 솔루션 항목 폴더에 표시됩니다.

    솔루션에 추가하지 않고 새 빈 그래프를 열려면 파일 메뉴에서 새로 만들기, 파일을 클릭합니다.

    모델링 프로젝트에 빈 그래프를 추가하려면 아키텍처 메뉴를 열고 새 다이어그램을 클릭합니다.

Q & A

Q: 그래프를 만드는 데 시간이 오래 걸리는 이유는 무엇인가요?

A: 그래프를 처음으로 생성하는 경우 Visual Studio는 검색된 모든 종속성을 인덱싱합니다. 특히 대형 솔루션의 경우 이 프로세스에 다소 시간이 걸릴 수도 있지만 이후에는 성능이 개선됩니다. 코드가 변경되면 Visual Studio는 업데이트된 코드만 다시 인덱싱합니다. 그래프가 완성될 때까지 기다릴 수 없는 경우 언제든지 이 단계를 취소하고 다음 방법을 시도해 볼 수 있습니다.

  • 원하는 종속성만 그래프로 표시합니다.

  • 전체 솔루션에 대한 그래프를 생성하기 전에 솔루션 범위를 줄입니다.

Visual Studio는 1GB의 메모리로 실행할 수 있지만, Visual Studio가 코드 인덱스를 만들고 그래프를 생성하는 동안 오래 지연되지 않도록 컴퓨터에 최소 2GB의 메모리가 있는 것이 좋습니다.

프로젝트 항목의 출력 디렉터리에 복사항상 복사로 설정된 경우 그래프를 만들거나 솔루션 탐색기에서 그래프로 항목을 추가하는 데 더 오래 걸릴 수 있습니다. 이 경우 증분 빌드 및 Visual Studio에서 매번 프로젝트를 다시 빌드할 때마다 문제가 발생할 수 있습니다. 성능을 높이려면 이 속성을 변경된 내용만 복사 또는 PreserveNewest로 변경합니다. 증분 빌드을 참조하세요.

Q: Visual Studio에서 그래프가 만들어지지 않았습니다.

A: 솔루션에서 정상적으로 빌드된 프로젝트가 없기 때문일 수 있습니다. Visual Studio에서는 하나 이상의 프로젝트가 성공적으로 빌드될 경우 그래프가 생성되며 올바르게 빌드된 코드에 대해서만 그래프에 종속성이 표시됩니다. 특성 구성 요소에 대해 빌드 오류가 발생하면 해당 오류가 그래프에 나타납니다. 이 그래프를 기반으로 아키텍처 관련 사항을 결정하기 전에 구성 요소가 실제로 빌드되는지와 해당 구성 요소에 종속성이 있는지를 확인해야 합니다.

특정 종속성 확인

예를 들어 보류 중인 변경 내용이 있는 일부 파일에서 코드 검토를 수행하려는 경우 변경 내용의 종속성을 확인하려면 해당 파일에서 종속성 그래프를 만듭니다.

그룹화된 노드가 있는 종속성 그래프

솔루션의 특정 종속성 확인

  1. 솔루션 탐색기를 열고 원하는 프로젝트, 어셈블리 참조, 폴더, 파일, 형식 및 멤버를 선택합니다.

  2. 항목과 멤버를 그래프로 표시합니다. 그런 다음 솔루션 탐색기 도구 모음에서 새 그래프 문서 만들기 선택한 노드에서 새 그래프 만들기 단추를 클릭합니다.

    형식이나 멤버에 대한 종속성을 포함하는 항목을 찾으려면 솔루션 탐색기에서 해당 형식 또는 멤버의 바로 가기 메뉴를 열고 종속성 형식을 클릭한 다음 결과를 선택합니다.

    특정 코드를 시각화하는 방법

    항목에 부모 계층을 포함하려면 솔루션 탐색기 도구 모음에서 새 그래프 문서 만들기... 목록을 열고 상위 항목이 있는 새 종속성 그래프를 클릭합니다.

    특정 코드 및 부모를 시각화하는 방법

    빈 그래프나 기존 그래프로 항목을 끌어 올 수도 있습니다. 빈 그래프를 만들려면 파일 메뉴에서 새로 만들기, 파일, 방향이 지정된 그래프 문서를 차례로 클릭합니다. 항목의 부모 계층 구조를 포함하려면 항목을 끄는 동안 Ctrl 키를 누르고 있으십시오.

    참고

    Windows Phone 또는 Windows 스토어와 같은 여러 앱에 공유되는 프로젝트에서 항목을 추가할 경우 해당 항목은 현재 활성화된 앱 프로젝트와 함께 맵에 나타납니다.다른 앱 프로젝트에 대한 컨텍스트를 변경하고 공유 프로젝트의 항목을 추가하면 해당 항목이 새로 활성화된 앱 프로젝트와 함께 나타납니다.맵의 항목에 수행하는 작업은 동일한 컨텍스트를 공유하는 항목에만 적용됩니다.

  3. 항목을 탐색하려면 해당 항목을 확장합니다. 항목을 확장하려면 항목 위로 마우스 포인터를 이동한 다음 갈매기형(^) 펼침 단추가 나타나면 클릭합니다. 모든 항목을 확장하려면 그래프에 대한 바로 가기 메뉴를 엽니다. 그룹, 모두 확장을 차례로 클릭합니다.

    참고

    이 옵션은 모든 그룹을 확장할 때 사용할 수 없는 그래프 또는 메모리 문제가 발생하는 경우 사용할 수 없습니다.

  4. 코드에는 있는데 그래프에는 표시되지 않는 멤버를 확인하려면 자식 다시 페치 자식 다시 페치 아이콘를 클릭합니다. 이러한 그룹 멤버는 보다 쉽게 확인될 수 있도록 다른 스타일으로 표시됩니다. 종속성 그래프 편집 및 사용자 지정을 참조하세요.

  5. 그래프의 항목과 관련된 추가 항목을 보려면 해당 항목의 바로 가기 메뉴를 열고 표시를 클릭한 다음 원하는 관계의 종류를 클릭합니다.

    어셈블리의 경우 다음을 클릭합니다.

    참조된 어셈블리

    이 어셈블리가 참조하는 어셈블리를 추가합니다. 외부 그룹에 외부 어셈블리가 나타납니다.

    어셈블리 참조

    솔루션에 이 어셈블리를 참조하는 어셈블리를 추가합니다.

    클래스의 경우 다음을 클릭합니다.

    기본 형식

    클래스의 경우 기본 클래스 및 구현된 인터페이스를 추가합니다.

    인터페이스의 경우 기본 인터페이스를 추가합니다.

    파생 형식

    클래스의 경우 파생된 클래스를 추가합니다.

    인터페이스의 경우 파생된 인터페이스와 구현 클래스 또는 구조체를 추가합니다.

    모든 기본 형식

    기본 클래스 또는 인터페이스 계층 구조를 재귀적으로 추가합니다.

    모든 파생 형식

    클래스의 경우 파생된 클래스를 재귀적으로 추가합니다.

    인터페이스의 경우 파생된 모든 인터페이스와 구현 클래스 또는 구조체를 재귀적으로 추가합니다.

    포함 계층 구조

    부모 컨테이너 계층 구조를 추가합니다.

    사용된 형식

    이 클래스가 사용하는 모든 클래스와 해당 멤버를 추가합니다.

    사용되는 형식

    이 클래스를 사용하는 모든 클래스와 해당 멤버를 추가합니다.

    메서드의 경우 다음을 클릭합니다.

    포함 계층 구조

    부모 컨테이너 계층 구조를 추가합니다.

    호출된 메서드

    이 메서드가 호출하는 메서드를 추가합니다.

    호출자 메서드

    이 메서드를 호출하는 메서드를 추가합니다.

    기본 형식의 재정의된 메서드

    다른 메서드를 재정의하거나 인터페이스 메서드를 구현하는 메서드의 경우 재정의된 기본 클래스에 모든 추상 메서드 또는 가상 메서드를 추가하고 구현된 인터페이스 메서드를 추가합니다(있는 경우).

    참조된 필드

    이 메서드가 참조하는 필드를 추가합니다.

    필드의 경우 다음을 클릭합니다.

    포함 계층 구조

    부모 컨테이너 계층 구조를 추가합니다.

    메서드 참조

    이 필드를 참조하는 메서드를 추가합니다.

어셈블리 또는 이진 파일의 특정 종속성 확인

  1. 아키텍처 메뉴에서 아키텍처 탐색기를 차례로 클릭합니다.

  2. 첫 번째 열의 파일 시스템에서 파일 선택을 클릭합니다.

  3. 열기 상자에서 어셈블리 또는 이진을 찾아서 선택합니다. 그런 다음 열기를 클릭하여 해당 어셈블리나 이진을 아키텍처 탐색기의 다음 열에 추가합니다.

  4. 다음 열에서 어셈블리 또는 이진을 선택합니다.

    기본적으로 다음 열에는 선택한 항목으로 포함된 항목이 표시됩니다.

    다른 관련 항목을 선택하려면 축소된 열을 선택한 항목이 있는 열의 오른쪽으로 확장합니다.노드 탐색에서 원하는 항목 종류를 선택합니다.아웃바운드 탐색 또는 인바운드 탐색에서 원하는 관계의 종류를 선택합니다.아키텍처 탐색기로 코드 찾기을 참조하세요.

  5. 그래프에 표시할 모든 항목을 찾아 선택합니다.

  6. 새 그래프를 만들려면 아키텍처 탐색기 도구 모음에서 선택한 모든 노드에서 새 그래프 문서 만들기 선택한 노드에서 새 그래프 만들기 단추를 클릭합니다.

    또는

    선택 항목을 그래프에 추가하려면 다음 단계를 수행합니다.

    1. 그래프의 .dgml 파일을 열거나 빈 그래프를 만듭니다.

    2. 아키텍처 탐색기 도구 모음에서 현재 표시되는 그래프 문서에 선택한 노드 모두 추가 그래프 단추에 선택한 노드 모두 추가를 클릭합니다.

      또는

      아키텍처 탐색기의 항목을 그래프로 끌어 옵니다.

C 및 C++ 소스 파일과 헤더 파일 간 종속성 확인

C++ 프로젝트에 대해 보다 완전한 그래프를 만들려면 해당 프로젝트에 대해 찾아보기 정보 컴파일러 옵션(/FR)을 설정합니다. /FR, /Fr(.Sbr 파일 만들기)을 참조하세요. 그렇지 않으면 메시지가 표시되고 이 옵션을 설정하라는 메시지가 나타납니다. 확인을 선택하면 현재 그래프에 대해서만 옵션이 설정됩니다. 이후 모든 그래프에 대해 메시지를 숨기도록 선택할 수 있습니다. 이 메시지를 숨기는 경우 다시 표시되도록 설정할 수 있습니다. 이렇게 하려면 다음 레지스트리 키를 0으로 설정하거나 해당 키를 삭제합니다.

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\12.0\NativeProvider : AutoEnableSbr

Visual C++ 프로젝트가 포함된 솔루션을 열 때 IntelliSense 데이터베이스를 업데이트하는 데 시간이 걸릴 수 있습니다. 이 동안에는 IntelliSense 데이터베이스가 업데이트를 완료할 때까지 헤더 파일(.h 또는 #include)에 관한 종속성 그래프를 만들 수 없습니다. Visual Studio 상태 표시줄에서 업데이트 진행률을 모니터링할 수 있습니다. 특정 IntelliSense 설정을 사용할 수 없으므로 나타나는 문제 또는 메시지를 해결하려면 C 및 C++ 코드의 그래프 문제 해결을 참조하세요.

  • 솔루션의 모든 소스 파일과 헤더 파일 간 종속성을 확인하려면 아키텍처 메뉴에서 종속성 그래프 생성, 포함 파일의 경우를 차례로 클릭합니다.

    네이티브 코드의 종속성 그래프

  • 현재 열려 있는 파일과 관련 소스 파일 및 헤더 파일 간의 종속성을 확인하려면 소스 파일이나 헤더 파일을 열고 파일 내 임의의 위치에서 파일 바로 가기 메뉴를 연 다음 포함 파일의 그래프 생성을 클릭합니다.

    .h 파일의 첫 번째 수준 종속성 그래프

C 및 C++ 코드의 그래프 문제 해결

다음 항목은 C 및 C++ 코드에서 지원되지 않습니다.

  • 기본 형식은 부모 계층 구조가 포함된 그래프에 나타나지 않습니다.

  • 대부분의 표시 메뉴 항목은 C 및 C++ 코드에 사용할 수 없습니다.

C 및 C++ 코드의 종속성 그래프를 만들 때는 다음과 같은 문제가 발생할 수 있습니다.

문제

가능한 원인

해결 방법

종속성 그래프가 생성되지 않습니다.

솔루션에 프로젝트가 성공적으로 만들어지지 않습니다.

발생한 빌드 오류를 수정하고 그래프를 재생성합니다.

아키텍처 메뉴에서 종속성 그래프를 생성하려고 하면 Visual Studio가 응답하지 않습니다.

프로그램 데이터베이스 파일(.pdb)이 손상될 수 있습니다.

.pdb 파일에는 형식, 메서드 및 소스 파일 정보와 같은 디버깅 정보가 저장됩니다.

솔루션을 다시 빌드한 다음 다시 시도합니다.

IntelliSense 검색 데이터베이스에 대한 특정 설정을 사용할 수 없습니다.

특정 IntelliSense 설정을 Visual Studio 옵션 대화 상자에서 사용하지 못할 수 있습니다.

설정을 사용할 수 있도록 설정합니다.

옵션, 텍스트 편집기, C/C++, 고급을 참조하세요.

알 수 없는 메서드라는 메시지가 메서드 노드에 나타납니다.

이 문제는 메서드의 이름을 확인할 수 없기 때문에 발생합니다.

이진 파일에 기본 재배치 테이블이 없을 수 있습니다.

링커에서 /FIXED:NO 옵션을 설정합니다.

/FIXED(고정 기준 주소)을 참조하세요.

프로그램 데이터베이스 파일(.pdb)이 빌드되지 않았을 수 있습니다.

.pdb 파일에는 형식, 메서드 및 소스 파일 정보와 같은 디버깅 정보가 저장됩니다.

링커에서 /DEBUG 옵션을 설정합니다.

/DEBUG(디버깅 정보 생성)을 참조하세요.

.pdb 파일을 열 수 없거나 예상되는 위치에서 찾을 수 없습니다.

.pdb 파일이 예상되는 위치에 있는지 확인합니다.

디버그 정보가 .pdb 파일에서 제거되었습니다.

/PDBSTRIPED 옵션이 링커에서 사용된 경우 전체 .pdb 파일을 대신 포함합니다.

/PDBSTRIPPED(전용 기호 제거)을 참조하세요.

호출자가 함수가 아니며 이진 파일의 썽크이거나 데이터 섹션의 포인터입니다.

호출자가 썽크이면 썽크를 방지하기 위해 _declspec(dllimport)를 사용해 봅니다.

참조

종속성 그래프 공유

다른 Visual Studio 사용자와 그래프 공유

  • 파일 메뉴를 사용하여 그래프를 저장합니다.

    또는

    그래프를 특정 프로젝트의 일부로 저장하려면 그래프 영역에 대한 바로 가기 메뉴를 엽니다. <DependencyGraphName.dgml> 이동을 클릭하고 그래프를 저장할 프로젝트를 클릭합니다.

    Visual Studio는 그래프를 Visual Studio Ultimate, Visual Studio Premium 및 Visual Studio Professional의 다른 사용자와 공유할 수 있는 .dgml 파일로 저장합니다.

    참고

    Visual Studio Premium 및 Visual Studio Professional 사용자와 그래프를 공유하기 전에 모든 그룹을 확장하고, 숨겨진 노드와 그룹 간 링크를 표시하고, 삭제된 노드 중 다른 작업자가 그래프 상에서 볼 수 있도록 하려는 노드를 검색합니다.그렇지 않으면 다른 사용자가 이러한 항목을 볼 수 없습니다.

    모델링 프로젝트에 있거나 모델링 프로젝트에서 다른 위치로 복사된 그래프를 저장할 때 다음 오류가 발생할 수 있습니다.

    "프로젝트 디렉터리 외부에 fileName을 저장할 수 없습니다.연결된 항목이 지원되지 않습니다."

    Visual Studio에서 오류가 표시되지만 저장된 버전이 만들어집니다.이 오류가 발생하지 않게 하려면 모델링 프로젝트 외부에 그래프를 만듭니다.그런 다음 원하는 위치에 그래프를 저장할 수 있습니다.파일을 솔루션의 다른 위치에 복사하고 저장해 보는 것으로는 문제가 해결되지 않습니다.

그래프를 이미지로 내보내면 Microsoft Word나 PowerPoint 같이 다른 응용 프로그램으로 그래프를 복사할 수 있습니다.

  1. 그래프 영역의 바로 가기 메뉴를 열고 편집, 이미지 복사를 차례로 클릭합니다.

  2. 이미지를 다른 응용 프로그램에 붙여넣습니다.

그래프를 XPS 파일로 내보내면 Internet Explorer 같이 XML 또는 XAML 뷰어에서 그래프를 확인할 수 있습니다.

  1. 그래프 영역의 바로 가기 메뉴를 열고 XPS로 저장을 클릭합니다.

  2. 파일을 저장할 위치를 찾습니다.

  3. 그래프 이름을 지정합니다. 파일 형식 상자가 **XPS 파일(*.xps)**로 설정되었는지 확인합니다. 저장을 클릭합니다.

프로그래밍 방식으로 그래프 만들기

일괄 처리 중에 작업할 수 있도록 그래프 문서(.dgml 파일)를 만들려면 GraphCmd.exe 명령줄 도구를 실행합니다. 예를 들어 빌드 간에 변경된 종속성을 찾으려면 각 빌드 후에 도구를 실행합니다. 이 도구는 C:\Program Files\Microsoft Visual Studio 12.0\Common7\IDE 폴더에서 찾을 수 있습니다.

GraphCmd.exe에서는 .NET 코드만 지원하며 Visual Studio 솔루션이나 프로젝트 파일의 소스 코드가 아닌 어셈블리나 .dgml 파일에 대한 종속성 정보만 생성합니다. GraphCmd.ex는 Visual Studio 외부에서 실행되므로 DGQL 쿼리의 작업에 대한 지원이 제한됩니다.

GraphCmd.exe의 구문은 다음과 같습니다.

GraphCmd -? -all -exceptions -input File_Name -query File_Name -exec "DGQL_Statement" -output File_Name -path alias=path

GraphCmd.exe의 옵션은 다음과 같습니다.

-input, -query, -exec-path 옵션을 여러 번 지정할 수 있습니다.

-?

GraphCmd.exe의 도움말을 표시합니다.

-all

마지막 노드 집합만이 아닌 중간 쿼리 결과를 모두 포함합니다.

-exceptions

쿼리 예외를 그래프 문서(.dgml) 파일로 보고합니다.

-input File_Name

지정한 .dgml 파일을 처리합니다.

Visual Studio에서 더 쉽게 시각화할 수 있도록 크기가 큰 .dgml 파일을 후처리하고 필터링하는 데 유용합니다.

-query File_Name

지정한 DGQL(Directed Graph Query Language) 파일(.dgql)을 실행합니다.

참조

-exec "DGQL_Statement"

지정한 DGQL 문을 실행합니다.

DGQL(Directed Graph Query Language) 이해를 참조하십시오.

-output File_Name

지정한 .dgml 파일을 출력합니다.

-path alias=path

DGML 문서의 입력과 출력에 사용할 새 별칭을 지정합니다.

예를 들면 다음과 같습니다.

GraphCmd -output MyGeneratedGraph.dgml -path "MyPathAlias=C:\Program Files\..."

일반적으로 사용되는 경로에 대한 별칭을 참조하십시오.

일반적으로 사용되는 경로에 대한 별칭

일반적으로 사용되는 경로에 대한 별칭을 통해 .dgml 파일의 크기뿐만 아니라 파일을 로드하거나 저장하는 데 필요한 시간을 줄일 수 있습니다. 별칭을 만들려면 .dgml 파일의 끝에 <Paths></Paths> 섹션을 추가합니다. 다음과 같이 이 섹션에서 <Path/> 요소를 추가하여 경로의 별칭을 정의합니다.

<Paths>
   <Path Id="MyPathAlias" Value="C:\...\..." />
</Paths>

.dgml 파일의 요소에서 별칭을 참조하려면 <Path/> 요소의 Id를 달러 기호($) 및 괄호(())로 묶습니다.

<Nodes>
   <Node Id="MyNode" Reference="$(MyPathAlias)MyDocument.txt" />
</Nodes>
<Properties>
   <Property Id="Reference" Label="My Document" DataType="System.String" IsReference="True" />
</Properties>

.dgml 파일을 편집하려면 종속성 그래프 편집 및 사용자 지정을 참조하십시오.

DGQL(Directed Graph Query Language)에 대해 자세히 알아보기

DGQL은 DGML을 만드는 데 사용할 수 있는 간단한 쿼리 언어입니다. DGQL 문은 노드를 선택하면 다음 작업에 대한 입력이 생성되고 해당 출력은 다음 노드 선택에 대한 입력이 되는 방식으로 노드 선택과 작업이 교대로 반복되는 패턴을 따릅니다.

DGQL 문의 형식은 다음과 같습니다.

<node selection> / <action> / <node selection> / <action> / ...

다음 표에서는 노드를 선택하는 데 사용되는 DGQL 구문을 설명합니다.

*

모든 노드를 선택합니다.

+ "text"

"text"가 포함된 모든 노드를 선택합니다.

+ Id.Equals("text")

Id가 "text"인 모든 노드를 선택합니다.

+ Background.Contains("text")

Background 특성에 "text" 문자열이 포함된 값이 있는 모든 노드를 선택합니다.

+ "text1" + "text2" + ...

"text1" 또는 "text2"와 일치하는 모든 노드를 선택합니다.

+ MyProperty="True"

값이 "True"인 MyProperty라는 속성이 있는 모든 노드를 선택합니다.

- Label.Contains("text")

"text" 문자열을 Contains한 Label 특성이 있는 노드를 제외하고 모든 노드를 선택합니다.

+ Category.Is("MyCategory")

MyCategory라는 범주가 있거나 MyCategory에서 상속되는 모든 노드를 선택합니다.

다음 표에서는 선택한 노드에 대해 수행할 수 있는 직접 작업 예제에 대해 설명합니다.

작업 예제

설명

Microsoft.Contains

입력 노드에 포함된 모든 노드를 반환합니다. Contains를 다른 링크 범주로 바꿀 수 있습니다.

Microsoft.Open

입력 노드의 소스 코드를 엽니다.

참고

Visual Studio 내에서만 작동합니다.

Microsoft.AllOutBoundLinks

입력 노드에서 보내는 링크의 대상인 모든 노드를 반환합니다.

Microsoft.AllInboundLinks

입력 노드에 대한 링크의 소스 end인 모든 노드를 반환합니다.

Microsoft.Core.CreateGroupsByProperties

GroupByProperties 작업을 호출합니다.

Microsoft.AllNodes

현재까지 완성된 전체 그래프의 모든 노드를 반환합니다.

데이터 기반 작업에서는 입력 노드와 링크의 데이터만을 기반으로 항목을 선택합니다. 데이터 기반 작업을 사용하여 범주를 일치시킬 때는 상속된 범주가 포함됩니다. 다음 표에서는 데이터 기반 작업의 예제에 대해 설명합니다.

형식

설명

Node:Both:Category

Category 범주가 있으며 둘 중 한 방향을 가리키는 링크로 입력 노드와 연결된 모든 노드를 반환합니다.

Link:Both:Category

둘 중 한 방향을 가리키는 링크로 입력 노드와 연결되었으며 Category 범주가 있는 모든 노드를 반환합니다.

Link:Backward:Category

Category 범주가 있는 링크로 입력 노드를 가리키는 모든 노드를 반환합니다.

Link:Forward:Category

Category 범주가 있는 링크로 입력 노드에서 가리키는 모든 노드를 반환합니다.

  • 일반적으로 특정 입력 노드 집합에 대한 "기본" 작업이 있으며 아키텍처 탐색기에서 이 작업이 자동으로 선택됩니다. 동일하게 동작하게 하려면 빈 작업(//)을 사용합니다.

  • DGQL에서는 공백이 중요하지 않으므로 필요한 경우 쿼리 형식을 한 줄에 맞게 지정할 수 있습니다. 이는 GraphCmd에 –exec 옵션을 사용하는 경우에 유용합니다.

  • DGQL을 디버깅할 때 아키텍처 탐색기에서 "Execute Expanded" 작업을 사용하면 쿼리의 각 단계를 보고 예상과 다른 결과를 생성하는 단계를 찾는 데 유용합니다.

예제

다음 DGQL문은 다음 단계에서 설명된 쿼리를 수행합니다.

+ Id.Equals("Microsoft.Solution.ClassView") / "Microsoft.Solution.ClassView" / * / "Node:Both:CodeSchema_Class" / + CodeSchemaProperty_IsPublic.Equals("True")
  1. 아키텍처 탐색기의 첫 번째 열에서 클래스 뷰 노드를 클릭합니다.

  2. "Microsoft.Solution.ClassView" 작업을 수행하여 솔루션의 모든 네임스페이스를 반환합니다.

  3. 모든 네임스페이스를 선택하려면 *를 사용합니다.

  4. 둘 중 한 방향의 링크로 해당 네임스페이스에 연결된 CodeSchema_Class 범주의 노드를 모두 선택합니다. 이는 일반적으로 포함 링크입니다.

  5. 결과 클래스를 CodeSchemaProperty_IsPublic="True" 속성이 있는 클래스로만 필터링합니다.

기술적으로 "Microsoft.Solution.ClassView" 작업은 클래스 뷰 노드의 "기본" 작업이기 때문에 필요 없습니다. 따라서 작업을 //로 바꾸어 쿼리를 간소화하고 다음과 같이 한 줄로 형식을 지정할 수 있습니다.

+Id.Equals("Microsoft.Solution.ClassView")//*/"Node:Both:CodeSchema_Class"/+CodeSchemaProperty_IsPublic.Equals("True")

어떻게 해야 합니까?

자세한 정보는 어디서 얻을 수 있습니까?

범주

링크

포럼

블로그