Grafik Ketergantungan proyek Visual Studio


130

Saya saat ini memigrasikan solusi besar (~ 70 proyek) dari VS 2005 + .NET 2.0 ke VS 2008 + .NET 3.5. Saat ini saya memiliki VS 2008 + .NET 2.0.

Masalahnya adalah bahwa saya perlu memindahkan proyek satu per satu ke kerangka kerja .NET baru memastikan bahwa tidak ada proyek .NET 2.0 referensi .NET 3.5 proyek. Apakah ada alat yang akan memberi saya grafik dependensi proyek yang bagus?

Jawaban:


39

Sudahkah Anda mencoba NDepend? Ini akan menunjukkan kepada Anda dependensi dan Anda juga dapat menganalisis kegunaan kelas dan metode Anda.

Situs web mereka:

http://ndepend.com


Untuk menyelesaikan jawaban @Eriawan pada bulan April 2020, NDepend versi 2020.1 telah dirilis dengan Grafik Ketergantungan yang sepenuhnya dibangun kembali. Sekarang skala pada solusi besar yang terbuat dari ratusan proyek dan menawarkan banyak fasilitas navigasi.

Berikut ini tampilannya pada proyek OSS NopCommerce .

Grafik Ketergantungan NDepend pada NopCommerce

Berikut ini tampilannya di seluruh pustaka .NET Core 3 kelas (176 rakitan).

masukkan deskripsi tautan di sini

Penafian: Saya bekerja di NDepend


4
poster asli tidak mengatakan ndepend gratis dan itu memecahkan masalah.
kehormatan krystan

6
Mungkin gratis pada saat menulis jawaban ini, tetapi sekarang tidak.
Levente Koncz

@ patrick-dari-ndepend-team tolong jangan langsung mengedit jawaban saya dan buka jawaban baru.
Eriawan Kusumawardhono

Ok @EriawanKusumawardhono maaf kalau ini masalah buat kamu. Dengan cara ini, pembaca mendapatkan rincian yang lebih jelas dan ini meningkatkan kegunaan jawaban, apakah Anda ingin saya menghapus detail tambahan dan tangkapan layar?
Patrick dari tim NDepend

@ PatrickfromNDependteam detail tambahan dan tangkapan layar OK. tetapi karena ini awalnya jawaban saya, sepertinya hasil edit Anda membuat saya terlihat seperti bekerja di NDepend. Harap tambahkan jawaban baru dengan hasil edit Anda, dan juga tekankan bahwa jawaban baru Anda adalah tambahan dari jawaban saya. Terima kasih sebelumnya :)
Eriawan Kusumawardhono

169

Saya membutuhkan sesuatu yang serupa, tetapi tidak ingin membayar (atau menginstal) alat untuk melakukannya. Saya membuat skrip PowerShell cepat yang melewati referensi proyek dan memuntahkannya dalam format ramah yuml.me sebagai gantinya:

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
luar biasa. Saya mengambil ini dan memperluasnya untuk melewati semua sub proyek, kemudian memperpanjangnya lagi untuk mengambil file sln alih-alih memetakan seluruh proyek. Terima kasih
Jon

Versi apa dari Visual Studio ini bekerja dengan? Juga, untuk memvisualisasikan C ++ daripada proyek C #, apakah cukup untuk mengubah akhiran file .csproj menjadi .vcproj? Bekerja dengan VS 2005 di sini dan saya mendapatkan file hasil kosong ...
ssc

1
Itu ditulis terhadap proyek 2010 untuk C #, tetapi Anda mungkin bisa men-tweak dengan sangat mudah dengan melihat XML di dalam proyek C ++ dan menyesuaikan kode :-)
Danny Tuppeny

5
@ ssc Ada kode yang sedikit diperbarui yang diposting di blog saya yang mungkin lebih mudah untuk di-tweak: blog.dantup.com/2012/05/…
Danny Tuppeny

5
Jika Anda menggunakan Powershell 2.0, Anda harus menambahkan =$trueke Mandatorydan ValueFromPipelineparameter
MoMo

79

Pembaruan: ReSharper karena versi 8 memiliki fitur 'Lihat Ketergantungan Proyek' bawaan.

Versi ReSharper <8 memiliki fitur Internal untuk menampilkan grafik ketergantungan dalam menggunakan yFiles viewer. Lihat manual cepat di bagian bawah posting.

masukkan deskripsi gambar di sini

Bagaimana caranya

  1. Instal alat Anda dari sini .
  2. Jalankan VS dengan argumen command line /resharper.internal.
  3. Pergi ke ReSharper / Internal / Show Dependencies.
  4. Tentukan proyek yang ingin Anda sertakan ke 'gambaran besar'.
  5. Hapus centang 'Kecualikan terminal node ...' kecuali Anda membutuhkannya.
  6. Tekan 'Tampilkan'.
  7. Gunakan tata letak hierarkis di yEd (Alt + Shift + H)
  8. Berikan umpan balik =)

2
Juga Resharper> Inspect> Project Hierarchy untuk mendapatkan daftar proyek yang merujuk pada saat ini
Lu55

5
Resharper> Arsitektur> 'Tampilkan Diagram Ketergantungan Proyek'
Dr Blowhard

32

Anda bisa mendapatkan grafik ketergantungan proyek dengan mudah menggunakan Visual Studio 2010 Ultimate, pindai hingga 5 menit ke video ini untuk melihat caranya: http://www.lovettsoftware.com/blogengine.net/post/2010/05/27/Architecture-Explorer .aspx

Dalam Visual Studio 2010 Ultimate: Arsitektur | Hasilkan Grafik Ketergantungan | Dengan Majelis.


@ CJohnson Anda dapat melakukan ini untuk kode C dan C ++ jika Anda memiliki Visual Studio 2010 Feature Pack 2 . Lihat juga Cara: Menghasilkan Grafik Ketergantungan untuk Kode C dan C ++
Esther Fan - MSFT

1
Mencobanya, melemparkan pengecualian. Rupanya MS tidak pernah mengujinya dengan apa pun di luar beberapa proyek. Benar-benar tidak berharga menurut saya.
C Johnson

1
Tidak hanya itu, itu juga sangat lambat. Saya akan membuat -10 ini jika saya bisa. Saya menulis dependensi walker proyek saya sendiri (Untuk sistem build kami sendiri) dan sangat cepat dibandingkan dengan yang ada di studio visual.
C Johnson

@ CJohnson Saya setuju bahwa ini lambat dan cenderung melempar pengecualian untuk solusi besar, tetapi masih lebih baik daripada tidak sama sekali. Saya mulai bekerja dengan menutup semua aplikasi, menghentikan beberapa layanan dan memulai kembali Visual Studio.
WynandB

Solusi besar bagi saya adalah sekitar 600 proyek dengan jutaan baris kode. Tidak ada kesempatan untuk menghentikan beberapa layanan adalah solusi yang dapat diterima bagi saya.
C Johnson

19

Saya menulis alat yang dapat membantu Anda. VS Solution Dependency Visualizer menganalisis dependensi proyek dalam suatu solusi dan membuat diagram dependensi dari informasi ini, serta laporan teks.


Apa versi Visual Studio dan proyek apa yang bekerja dengan ini? VS 2005 / C ++ di sini dan alat ini sepertinya tidak melakukan apa-apa ...
ssc

itu pasti berfungsi dengan vs 2008/2010 dan .csproj / .vbproj. tidak menguji dengan vs2005, tetapi saat ini file .vcproj tidak dikenali
devio

Alat ini hanya menampilkan file solusi setelah menganalisisnya :-(. Bukan tentang 300 proyek saya.
thersch

@thersch jika Anda ingin saya melihatnya, silakan zip .sln dan memproyeksikan file (sehingga struktur direktori asli dipertahankan), mengunggahnya pada berbagi file, dan hubungi saya melalui blog saya. thx
devio

9

Saya memiliki masalah yang sama, tetapi lebih rumit karena beberapa proyek mereferensikan versi berbeda dari majelis yang sama.

Untuk mendapatkan keluaran yang menyertakan informasi versi dan memeriksa kemungkinan masalah pemuatan perakitan runtime, saya membuat alat ini:

https://github.com/smpickett/DependencyViewer

(tautan langsung ke rilis github: https://github.com/smpickett/DependencyViewer/releases )


1
Alat yang bagus! Sederhana dan efisien. Terima kasih untuk itu! +1 dari saya.
Buka

Alat yang sangat hebat! Saya bermimpi untuk hal seperti itu selama bertahun-tahun. Terima kasih banyak untuk membagikannya!
alehro

8

Anda dapat membuat grafik ketergantungan proyek Anda di VS 2010 Ultimate. Architecture Explorer memungkinkan Anda menelusuri solusi Anda, memilih proyek dan hubungan yang ingin Anda visualisasikan, dan kemudian membuat grafik ketergantungan dari pilihan Anda.

Untuk info lebih lanjut, lihat topik berikut:

Cara: Menghasilkan Dokumen Grafik dari Kode : http://msdn.microsoft.com/en-us/library/dd409453%28VS.100%29.aspx#SeeSpecificSource

Cara: Temukan Kode Menggunakan Explorer Arsitektur : http://msdn.microsoft.com/en-us/library/dd409431%28VS.100%29.aspx

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

Forum Visual Studio 2010 Architectural Discovery & Modeling Tools : http://social.msdn.microsoft.com/Forums/en-US/vsarch/threads


VS 2012 Professional juga? Atau hanya VS 2012 Ultimate?
Kiquenet

@Kiquenet Anda dapat membuat grafik ketergantungan di VS 2012 Ultimate. Anda dapat membuka dan membuat perubahan terbatas pada Premium dan Pro.
Esther Fan - MSFT


5

The solusi Powershell adalah yang terbaik. Saya mengadaptasinya menjadi skrip bash yang berfungsi pada mesin saya (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




1

Versi lanjutan dari PS Script dari Danny Tuppeny menunjukkan referensi Project dan External:

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"

Ini akan memberikan file yang dipisahkan dengan titik dua yang dapat dibuka dan dianalisis di Excel.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.