Biểu đồ phụ thuộc của các dự án Visual Studio


130

Tôi hiện đang chuyển một giải pháp lớn (~ 70 dự án) từ VS 2005 + .NET 2.0 sang VS 2008 + .NET 3.5. Hiện tại tôi có VS 2008 + .NET 2.0.

Vấn đề là tôi cần chuyển từng dự án sang .NET framework mới để đảm bảo rằng không có dự án .NET 2.0 nào tham chiếu dự án .NET 3.5. Có công cụ nào sẽ cho tôi một biểu đồ đẹp về các phụ thuộc dự án không?

Câu trả lời:


39

Bạn đã thử NDepend chưa? Nó sẽ cho bạn thấy các phụ thuộc và bạn cũng có thể phân tích khả năng sử dụng của các lớp và phương thức của bạn.

Trang web của họ:

http://ndepend.com


Để hoàn thành câu trả lời @Eriawan vào tháng 4 năm 2020, phiên bản NDepend 2020.1 đã được phát hành với Dependency Graph được xây dựng lại hoàn toàn. Bây giờ nó dựa trên các giải pháp lớn được thực hiện bởi hàng trăm dự án và cung cấp nhiều phương tiện điều hướng.

Đây là những gì nó trông giống như trong dự án OSS NopC Commerce .

Biểu đồ phụ thuộc NDepend trên NopC Commerce

Đây là giao diện của toàn bộ thư viện lớp .NET Core 3 (176 cụm).

nhập mô tả liên kết ở đây

Tuyên bố miễn trừ trách nhiệm: Tôi làm việc tại NDepend


3
áp phích ban đầu không nói ndepend là miễn phí và nó giải quyết vấn đề.
kirtan vinh dự

6
Nó có thể miễn phí tại thời điểm viết câu trả lời này, nhưng bây giờ thì không.
Levente Koncz

@ patrick-from-ndepend-team vui lòng không trực tiếp chỉnh sửa câu trả lời của tôi và thay vào đó hãy mở câu trả lời mới.
Eriawan Kusumawardhono

Ok @EriawanKusumawardhono xin lỗi nếu đó là một vấn đề cho bạn. Bằng cách này, người đọc có được nhiều chi tiết hơn và điều này giúp cải thiện tính hữu ích của câu trả lời, bạn có muốn tôi loại bỏ các chi tiết bổ sung và ảnh chụp màn hình không?
Patrick từ đội NDepend

@PatrickfromNDependteam các chi tiết bổ sung và ảnh chụp màn hình là OK. nhưng vì đây ban đầu là câu trả lời của tôi, có vẻ như bản chỉnh sửa của bạn bằng cách nào đó khiến tôi trông giống như làm việc tại NDepend. Vui lòng thêm câu trả lời mới với chỉnh sửa của bạn và cũng nhấn mạnh câu trả lời mới của bạn là bổ sung cho câu trả lời của tôi. Cảm ơn trước :)
Eriawan Kusumawardhono

169

Tôi cần một cái gì đó tương tự, nhưng không muốn trả tiền cho (hoặc cài đặt) một công cụ để làm điều đó. Tôi đã tạo một tập lệnh PowerShell nhanh chóng đi qua các tham chiếu dự án và thay thế chúng theo định dạng thân thiện 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
tuyệt vời. Tôi lấy cái này và mở rộng nó để đi qua tất cả các dự án phụ, sau đó mở rộng nó một lần nữa để lấy một tập tin sln thay vì ánh xạ toàn bộ dự án. Cảm ơn
Jon

Phiên bản nào của Visual Studio hoạt động với? Ngoài ra, để trực quan hóa C ++ thay vì các dự án C #, liệu có đủ để thay đổi hậu tố tệp .csproj thành .vcproj không? Làm việc với VS 2005 tại đây và tôi nhận được một tệp kết quả trống ...
ssc

1
Nó được viết chống lại một dự án năm 2010 cho C #, nhưng bạn có thể có thể điều chỉnh nó thực sự dễ dàng bằng cách xem xét XML bên trong một dự án C ++ và điều chỉnh mã :-)
Danny Tuppeny

5
@ssc Có mã được cập nhật một chút được đăng trên blog của tôi có thể dễ dàng chỉnh sửa hơn: blog.dantup.com/2012/05/ mẹo
Danny Tuppeny

5
Nếu bạn đang sử dụng Powershell 2.0, bạn sẽ cần phải thêm =$truevào MandatoryValueFromPipelinethông số
MoMo

79

Cập nhật: ReSharper kể từ phiên bản 8 có tính năng 'Xem phụ thuộc dự án' tích hợp .

Phiên bản ReSharper <8 có tính năng Nội bộ để hiển thị biểu đồ phụ thuộc khi sử dụng trình xem yFiles. Xem hướng dẫn nhanh ở dưới cùng của bài viết.

nhập mô tả hình ảnh ở đây

Làm thế nào để

  1. Cài đặt công cụ yEd từ đây .
  2. Chạy VS với đối số dòng lệnh /resharper.iternal.
  3. Chuyển đến ReSharper / Internal / Show Dependencies.
  4. Chỉ định các dự án mà bạn muốn đưa vào 'bức tranh lớn'.
  5. Bỏ chọn 'Loại trừ các nút thiết bị đầu cuối ...' trừ khi bạn cần nó.
  6. Nhấn 'Hiển thị'.
  7. Sử dụng bố cục phân cấp trong yEd (Alt + Shift + H)
  8. Cung cấp phản hồi =)

2
Đồng thời chia sẻ lại> Kiểm tra> Phân cấp dự án để có danh sách các dự án tham chiếu hiện tại
Lu55

5
Chia sẻ lại> Kiến trúc> 'Hiển thị sơ đồ phụ thuộc dự án'
Dr Blowhard

32

Bạn có thể dễ dàng lấy biểu đồ phụ thuộc dự án bằng Visual Studio 2010 Ultimate, quét tới 5 phút vào video này để xem cách: http://www.lovettsoftware.com/blogengine.net/post/2010/05/27/Arch architecture-Extorer .aspx

Trong Visual Studio 2010 Ultimate: Kiến trúc | Tạo đồ thị phụ thuộc | Bằng hội.


@CJohnson Bạn có thể làm điều này cho mã C và C ++ nếu bạn có Gói tính năng 2 của Visual Studio 2010 . Xem thêm Cách: Tạo đồ thị phụ thuộc cho mã C và C ++
Quạt Esther - MSFT

1
Đã thử nó, đã ném một ngoại lệ. Rõ ràng MS không bao giờ thử nghiệm nó với bất cứ điều gì ngoài một vài dự án. Hoàn toàn vô giá trị theo ý kiến ​​của tôi.
C Johnson

1
Không chỉ vậy, nó còn chậm khủng khiếp. Tôi sẽ làm điều này -10 nếu tôi có thể. Tôi đã viết walker phụ thuộc dự án của riêng tôi (Đối với hệ thống xây dựng riêng của chúng tôi) và nó nhanh như chớp so với cái trong studio hình ảnh.
C Johnson

@CJohnson Tôi đồng ý rằng nó chậm và dễ bị ném ngoại lệ cho các giải pháp lớn, nhưng vẫn tốt hơn là không có gì. Tôi đã làm cho nó hoạt động bằng cách đóng tất cả các ứng dụng, dừng một số dịch vụ và khởi động lại Visual Studio.
WynandB

Giải pháp lớn cho tôi là khoảng 600 dự án với hàng triệu dòng mã. Không có cơ hội rằng dừng một vài dịch vụ là một công việc chấp nhận được đối với tôi.
C Johnson

19

Tôi đã viết một công cụ có thể giúp bạn. VS Solution Dependency Visualizer phân tích các phụ thuộc dự án trong một giải pháp và tạo một biểu đồ phụ thuộc từ thông tin này, cũng như một báo cáo văn bản.


Phiên bản nào của Visual Studio và loại dự án nào hoạt động với? VS 2005 / C ++ ở đây và công cụ dường như không làm gì cả ...
ssc

nó chắc chắn hoạt động với so với 2008/2010 và .csproj / .vbproj. đã không thử nghiệm với vs2005, nhưng hiện tại các tệp .vcproj không được nhận dạng
devio

Công cụ này chỉ hiển thị tệp giải pháp sau khi phân tích nó :-(. Không phải khoảng 300 dự án của tôi.
thersch

@thersch nếu bạn muốn tôi xem thử, vui lòng nén các tệp .sln và dự án (để cấu trúc thư mục gốc được giữ nguyên), tải nó lên chia sẻ tệp và liên hệ với tôi qua blog của tôi. thx
devio

9

Tôi đã có một vấn đề tương tự, nhưng nó phức tạp hơn vì một số dự án đã tham khảo các phiên bản khác nhau của cùng một hội đồng.

Để có được đầu ra bao gồm thông tin phiên bản và kiểm tra các sự cố tải lắp ráp thời gian chạy có thể xảy ra, tôi đã tạo công cụ này:

https://github.com/smpickett/DependencyViewer

(liên kết trực tiếp đến bản phát hành github: https://github.com/smpickett/DependencyViewer/release )


1
Công cụ tuyệt vời! Đơn giản và hiệu quả. Cảm ơn vì điều đó! +1 từ tôi.
Buka

Công cụ thực sự tuyệt vời! Tôi đã mơ ước một cái gì đó như thế trong nhiều năm. Cảm ơn bạn rất nhiều vì đã chia sẻ nó!
alehro

8

Bạn có thể tạo một biểu đồ phụ thuộc của các dự án của bạn trong VS 2010 Ultimate. Architecture Explorer cho phép bạn duyệt giải pháp của mình, chọn dự án và các mối quan hệ mà bạn muốn trực quan hóa, sau đó tạo biểu đồ phụ thuộc từ lựa chọn của bạn.

Để biết thêm thông tin, xem các chủ đề sau:

Cách: Tạo tài liệu đồ thị từ mã : http://msdn.microsoft.com/en-us/l Library / dd409453% 28VS.100% 29.aspx # SunSpecificSource

Cách: Tìm mã bằng Architecture Explorer : http://msdn.microsoft.com/en-us/l Library / dd409431% 28VS.100% 29.aspx

Tải xuống RC : http://www.microsoft.com/doads/details.aspx?displaylang=en&FamilyID=457bab91-5eb2-4b36-b0f4-d6f34683c62a .

Diễn đàn Công cụ Mô hình & Khám phá Kiến trúc Visual Studio 2010 : http://social.msdn.microsoft.com/Forums/en-US/vsarch/threads


VS 2012 chuyên nghiệp quá? Hay chỉ có VS 2012 Ultimate?
Kiquenet

@Kiquenet Bạn có thể tạo biểu đồ phụ thuộc trong VS 2012 Ultimate. Bạn có thể mở và thực hiện các thay đổi hạn chế trong Premium và Pro.
Quạt Esther - MSFT

5

Để hoàn thành câu trả lời eriawan trên các biểu đồ được tạo bởi NDepend, hãy xem các ảnh chụp màn hình bên dưới. Bạn có thể tải xuống và sử dụng phiên bản dùng thử miễn phí của NDepend trong một thời gian.

Thông tin thêm về đồ thị phụ thuộc NDepend nhập mô tả hình ảnh ở đây

Thông tin thêm về Ma trận phụ thuộc NDepend : nhập mô tả hình ảnh ở đây

Tuyên bố miễn trừ trách nhiệm: Tôi là thành viên của nhóm công cụ


NDepend dành cho .NET, bản sao CppDepend của nó dành cho C ++ và hoạt động với các tệp .vcxproj
Patrick từ nhóm NDepend

5

Các giải pháp Powershell là tốt nhất. Tôi đã điều chỉnh nó thành tập lệnh bash hoạt động trên máy của mình (TM):

#!/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

Nếu bạn chỉ đơn giản muốn một biểu đồ phụ thuộc tôi đã tìm thấy thì đây là một trong những cách sạch nhất để có được một biểu đồ:

Phân tích phụ thuộc


3

VS 2019 đã đổi tên mô-đun biểu đồ phụ thuộc thành Bản đồ mã

đây là tài liệu chính thức: https://docs.microsoft.com/en-us/visualstudio/modeling/map-dependencies-across-your-solutions?view=vs-2019


"Để tạo và chỉnh sửa bản đồ mã, bạn cần có phiên bản Visual Studio Enterprise. Trong phiên bản Visual Studio Community và Professional, bạn có thể mở sơ đồ được tạo trong phiên bản Enterprise, nhưng bạn không thể chỉnh sửa chúng."
Matthew

1

Phiên bản mở rộng này của PS Script từ Daniel Tuppeny hiển thị cả tham chiếu Dự án và Bên ngoài:

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"

Nó sẽ cung cấp một tệp được phân tách bằng dấu hai chấm có thể được mở và phân tích trong Excel.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.