Visual Studio 프로젝트의 종속성 그래프


130

현재 VS 2005 + .NET 2.0에서 VS 2008 + .NET 3.5로 큰 솔루션 (~ 70 개의 프로젝트)을 마이그레이션하고 있습니다. 현재 VS 2008 + .NET 2.0이 있습니다.

문제는 .NET 2.0 프로젝트가 .NET 3.5 프로젝트를 참조하지 않도록 프로젝트를 하나씩 새로운 .NET 프레임 워크로 이동해야한다는 것입니다. 프로젝트 종속성에 대한 멋진 그래프를 제공하는 도구가 있습니까?

답변:


39

NDepend를 사용해 보셨습니까? 의존성을 보여주고 클래스와 메소드의 유용성을 분석 할 수도 있습니다.

그들의 웹 사이트 :

http://ndepend.com


2020 년 4 월 @Eriawan 답변을 완료하기 위해 NDepend 버전 2020.1이 종속성 그래프가 완전히 재구성 된 상태로 릴리스 되었습니다. 이제 수백 개의 프로젝트로 구성된 대규모 솔루션으로 확장되며 많은 탐색 기능을 제공합니다.

NopCommerce OSS 프로젝트 의 모습은 다음과 같습니다 .

NopCommerce의 NDepend 종속성 그래프

다음은 전체 .NET Core 3 클래스 라이브러리 (176 어셈블리)에서 보이는 모습입니다.

여기에 링크 설명을 입력하십시오

면책 조항 : 저는 NDepend에서 일합니다


3
원래 포스터는 ndepend가 무료라고 말하지 않았고 문제를 해결했습니다.
krystan honor

6
이 답변을 작성할 당시에는 무료 였을 수도 있지만 지금은 그렇지 않습니다.
Levente Koncz

@ patrick-from-ndepend-team 내 답변을 직접 수정하지 말고 대신 새 답변을여십시오.
Eriawan Kusumawardhono

Ok @EriawanKusumawardhono 문제가 있으면 죄송합니다. 이렇게하면 독자가 더 자세한 정보를 바로 얻을 수 있으며 답변의 유용성이 향상됩니다. 추가 정보와 스크린 샷을 제거 하시겠습니까?
NDepend 팀의 Patrick

@PatrickfromNDependteam 추가 정보와 스크린 샷은 괜찮습니다. 그러나 이것은 원래 내 대답이므로 편집 내용이 어떻게 든 NDepend에서 일하는 것처럼 보입니다. 수정 사항으로 새 답변을 추가하고 새 답변이 내 답변에 추가됨을 강조하십시오. 전에 감사합니다 :)
Eriawan Kusumawardhono

169

비슷한 것이 필요했지만 도구를 지불하거나 설치하고 싶지 않았습니다. 나는 프로젝트 참조를 통과 빠른 PowerShell 스크립트 작성 과 그들을 밖으로 뱉어 yuml.me 대신 친화적 인 포맷을 :

Function Get-ProjectReferences ($rootFolder)
{
    $projectFiles = Get-ChildItem $rootFolder -Filter *.csproj -Recurse
    $ns = @{ defaultNamespace = "http://schemas.microsoft.com/developer/msbuild/2003" }

    $projectFiles | ForEach-Object {
        $projectFile = $_ | Select-Object -ExpandProperty FullName
        $projectName = $_ | Select-Object -ExpandProperty BaseName
        $projectXml = [xml](Get-Content $projectFile)

        $projectReferences = $projectXml | Select-Xml '//defaultNamespace:ProjectReference/defaultNamespace:Name' -Namespace $ns | Select-Object -ExpandProperty Node | Select-Object -ExpandProperty "#text"

        $projectReferences | ForEach-Object {
            "[" + $projectName + "] -> [" + $_ + "]"
        }
    }
}

Get-ProjectReferences "C:\Users\DanTup\Documents\MyProject" | Out-File "C:\Users\DanTup\Documents\MyProject\References.txt"

4
대박. 나는 이것을 가지고 모든 하위 프로젝트를 진행하도록 확장 한 다음 전체 프로젝트를 매핑하는 대신 sln 파일을 가져 오기 위해 다시 확장했습니다. 감사합니다
Jon

어떤 버전의 Visual Studio에서 작동합니까? 또한 C # 프로젝트 대신 C ++를 시각화하려면 .csproj 파일 접미사를 .vcproj로 변경하면 충분합니까? VS 2005와 함께 작업하면 빈 결과 파일이 나타납니다.
ssc

1
C # 용 2010 프로젝트를 대상으로 작성되었지만 C ++ 프로젝트 내부의 XML을보고 코드를 조정하여 쉽게 쉽게 조정할 수 있습니다.
Danny Tuppeny

5
@ssc 내 블로그에는 약간 더 쉽게 업데이트 할 수있는 약간의 업데이트 된 코드가 있습니다 : blog.dantup.com/2012/05/…
Danny Tuppeny

5
Powershell 2.0을 사용 =$true하는 경우 MandatoryValueFromPipeline매개 변수 를 추가해야합니다.
MoMo

79

업데이트 : 버전 8 이후 ReSharper에는 '프로젝트 종속성보기' 기능 이 내장되어 있습니다.

ReSharper 버전 <8에는 yFiles 뷰어를 사용할 때 종속성 그래프를 표시하는 내부 기능 이 있습니다. 게시물 하단의 빠른 설명서를 참조하십시오.

여기에 이미지 설명을 입력하십시오

어떻게

  1. 여기 에서 yEd 도구를 설치 하십시오 .
  2. /resharper.internal 명령 줄 인수로 VS를 실행하십시오.
  3. ReSharper / Internal / Show Dependencies로 이동하십시오.
  4. '큰 그림'에 포함하려는 프로젝트를 지정하십시오.
  5. 필요하지 않은 경우 '터미널 노드 제외 ...'를 선택 취소하십시오.
  6. '표시'를 누르십시오.
  7. yEd에서 계층 적 레이아웃 사용 (Alt + Shift + H)
  8. 의견 제공 =)

2
또한 Resharper> Inspect> Project Hierarchy는 현재 참조하는 프로젝트 목록을 가져옵니다
Lu55

5
Resharper> 아키텍처> '프로젝트 종속성 다이어그램 표시'
Dr Blowhard

32

Visual Studio 2010 Ultimate를 사용하여 프로젝트 종속성 그래프를 쉽게 얻을 수 있습니다.이 비디오에서 5 분까지 스캔하여 방법을 확인하십시오. http://www.lovettsoftware.com/blogengine.net/post/2010/05/27/Architecture-Explorer .aspx

Visual Studio 2010 Ultimate : 아키텍처 | 종속성 그래프 생성 | 어셈블리 별.


@CJohnson Visual Studio 2010 기능 팩 2 가있는 경우 C 및 C ++ 코드에 대해이 작업을 수행 할 수 있습니다 . 참조 C 및 C ++ 코드에 대한 종속성 그래프 생성 방법 :
에스더 팬 - MSFT

1
그것을 시도하고 예외를 던졌습니다. 분명히 MS는 몇 가지 프로젝트를 넘어서는 아무것도 테스트하지 않았습니다. 내 의견으로는 절대 쓸모가 없다.
C Johnson

1
뿐만 아니라 너무 느립니다. 내가 할 수 있다면 나는 이것을 -10으로 만들 것이다. 나는 내 자신의 프로젝트 의존성 워커 (우리 자신의 빌드 시스템을 위해)를 썼고 비주얼 스튜디오의 것에 비해 번개가 빨랐다.
C Johnson

@ CJohnson 나는 큰 솔루션에 대해 예외가 발생하기 쉽고 느리다는 데 동의하지만 아무것도 아닌 것보다 낫습니다. 모든 응용 프로그램을 닫고 일부 서비스를 중지하고 Visual Studio를 다시 시작하여 작동하도록했습니다.
WynandB

나를위한 큰 솔루션은 수백만 줄의 코드가있는 약 600 개의 프로젝트입니다. 몇 가지 서비스를 중지해도 괜찮은 해결책이 될 것입니다.
C Johnson

19

나는 당신을 도울 수있는 도구를 썼습니다. VS 솔루션 종속성 Visualizer 는 솔루션 내의 프로젝트 종속성을 분석하고이 정보와 텍스트 보고서로 종속성 차트를 만듭니다.


어떤 버전의 Visual Studio와 어떤 종류의 프로젝트에서 작동합니까? VS 2005 / C ++이 도구는 작동하지 않는 것 같습니다.
ssc

그것은 확실히 2008/2010 및 .csproj / .vbproj와 함께 작동합니다. vs2005로 테스트하지 않았지만 현재 .vcproj 파일은 인식되지 않습니다.
devio

:-(을 분석 한 후이 도구 쇼에만 솔루션 파일 안 내 (300)에 대한 프로젝트..
thersch

@thersch 당신이 그것을보고 싶다면, .sln과 프로젝트 파일 (원래 디렉토리 구조가 유지되도록)을 압축하고 파일 공유에 업로드 한 다음 내 블로그를 통해 저에게 연락하십시오. thx
devio

9

비슷한 문제가 있었지만 여러 프로젝트가 동일한 어셈블리의 다른 버전을 참조하기 때문에 더 복잡했습니다.

버전 정보가 포함 된 출력을 얻고 가능한 런타임 어셈블리로드 문제를 확인하기 위해이 도구를 만들었습니다.

https://github.com/smpickett/DependencyViewer

(github 릴리스에 직접 링크 : https://github.com/smpickett/DependencyViewer/releases )


1
좋은 도구! 간단하고 효율적입니다. 고마워요! 나에게서 +1
부카

정말 좋은 도구입니다! 나는 몇 년 동안 그런 꿈을 꾸었습니다. 공유해 주셔서 감사합니다!
alehro

8

VS 2010 Ultimate에서 프로젝트의 종속성 그래프를 만들 수 있습니다. Architecture Explorer를 사용하면 솔루션을 탐색하고 시각화 할 프로젝트 및 관계를 선택한 다음 선택한 항목에서 종속성 그래프를 작성할 수 있습니다.

자세한 정보는 다음 주제를 참조하십시오.

방법 : 코드에서 그래프 문서 생성 : http://msdn.microsoft.com/en-us/library/dd409453%28VS.100%29.aspx#SeeSpecificSource

방법 : 아키텍처 탐색기를 사용하여 코드 찾기 : http://msdn.microsoft.com/en-us/library/dd409431%28VS.100%29.aspx

RC 다운로드 : http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=457bab91-5eb2-4b36-b0f4-d6f34683c62a .

Visual Studio 2010 아키텍처 검색 및 모델링 도구 포럼 : http://social.msdn.microsoft.com/Forums/en-US/vsarch/threads


VS 2012 Professional도? 아니면 VS 2012 Ultimate 만?
Kiquenet

@Kiquenet VS 2012 Ultimate에서 종속성 그래프를 만들 수 있습니다. Premium 및 Pro를 열고 제한적으로 변경할 수 있습니다.
Esther Fan-MSFT

5

NDepend가 생성 한 그래프에 대한 에리아 완 답변을 완료하려면 아래 스크린 샷을 참조하십시오. 한동안 무료 평가판 NDepend를 다운로드하여 사용할 수 있습니다 .

NDepend 종속성 그래프에 대한 추가 정보 여기에 이미지 설명을 입력하십시오

NDepend Dependency Matrix에 대한 추가 정보 : 여기에 이미지 설명을 입력하십시오

면책 조항 : 저는 도구 팀의 일원입니다


NDepend는 .NET 용이고 클론 CppDepend는 C ++ 용이며 .vcxproj 파일과 함께 작동합니다.
NDepend 팀의 Patrick

5

파워 쉘 솔루션은 최고입니다. 내 컴퓨터 (TM)에서 작동하는 bash 스크립트에 적용했습니다.

#!/bin/bash

for i in `find . -type f -iname "*.csproj"`; do
    # get only filename
    project=`basename $i`

    # remove csproj extension
    project=${project%.csproj}

    references=`cat $i | grep '<ProjectReference' | cut -d "\"" -f 2`
    for ref in $references; do
        # keep only filename (assume Windows paths)
        ref=${ref##*\\}

        # remove csproj extension
        ref=${ref%.csproj}

        echo "[ $project ] -> [ $ref ]"
    done

done



3

VS 2019는 종속성 그래프 모듈의 이름을 코드 맵으로 변경했습니다.

공식 문서는 다음과 같습니다. https://docs.microsoft.com/en-us/visualstudio/modeling/map-dependencies-across-your-solutions?view=vs-2019


"코드 맵을 생성하고 편집하려면 Visual Studio Enterprise 버전이 필요합니다. Visual Studio Community 및 Professional 버전에서는 Enterprise 버전에서 생성 된 다이어그램을 열 수 있지만 편집 할 수는 없습니다."
MatthewT

1

Danny Tuppeny의이 PS 스크립트 확장 버전은 프로젝트 및 외부 참조를 모두 보여줍니다.

Function Get-ProjectReferences($rootPath)
{
  $projectFiles = Get-ChildItem $rootPath -Filter *.csproj -Recurse
  $ns = @{ defaultNamespace = "http://schemas.microsoft.com/developer/msbuild/2003" }

  $projectFiles | ForEach-Object {
    $projectFile = $_ | Select-Object -ExpandProperty FullName
    $projectName = $_ | Select-Object -ExpandProperty BaseName
    $projectXml = [xml](Get-Content $projectFile)

    $projectReferences = $projectXml | Select-Xml '//defaultNamespace:ProjectReference/defaultNamespace:Name' -Namespace $ns | Select-Object -ExpandProperty Node | Select-Object -ExpandProperty "#text"
    $projectReferences | ForEach-Object {
        "PR:[" + $projectName + "]:[" + $_ + "]"
    }
  }

  $projectFiles | ForEach-Object {
    $projectFile = $_ | Select-Object -ExpandProperty FullName
    $projectName = $_ | Select-Object -ExpandProperty BaseName
    $projectXml = [xml](Get-Content $projectFile)

    $externalReferences = $projectXml | Select-Xml '//defaultNamespace:Reference/@Include' -Namespace $ns
    $externalReferences | ForEach-Object {
        "ER:[" + $projectName + "]:[" + $_ + "]"
    }

  }

}

Get-ProjectReferences "C:\projects" | Out-File "C:\temp\References.txt"

Excel에서 열고 분석 할 수있는 콜론으로 구분 된 파일을 제공합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.