Visual Studio projelerinin bağımlılık grafiği


130

Şu anda VS 2005 + .NET 2.0'dan VS 2008 + .NET 3.5'e büyük bir çözümü (~ 70 proje) geçiriyorum. Şu anda VS 2008 + .NET 2.0'a sahibim.

Sorun şu ki, projeleri tek tek yeni .NET çerçevesine taşımam ve hiçbir .NET 2.0 projesinin .NET 3.5 projesine başvurmamasını sağlamam gerekiyor. Bana proje bağımlılıklarının güzel bir grafiğini verecek herhangi bir araç var mı?

Yanıtlar:


39

NDepend'i denediniz mi? Size bağımlılıkları gösterir ve ayrıca sınıflarınızın ve yöntemlerinin kullanılabilirliğini analiz edebilirsiniz.

Web siteleri:

http://ndepend.com


@Eriawan cevabını Nisan 2020'de tamamlamak için NDepend 2020.1 sürümü tamamen yeniden oluşturulan Bağımlılık Grafiği ile yayınlandı . Artık yüzlerce projeden oluşan büyük çözümlere göre ölçekleniyor ve birçok navigasyon olanağı sunuyor.

İşte NopCommerce OSS projesinde nasıl göründüğü .

NopCommerce'de NDepend Bağımlılık Grafiği

İşte tüm .NET Core 3 sınıf kitaplığında (176 derleme) nasıl göründüğü.

bağlantı açıklamasını buraya girin

Sorumluluk reddi: NDepend'de çalışıyorum


4
orijinal afiş ndepend'in özgür olduğunu söylemedi ve sorunu çözdü.
krystan onur

6
Bu cevabı yazarken ücretsiz olabilirdi, ama şimdi değil.
Levente Koncz

@ patrick-from-ndepend-team lütfen doğrudan cevabımı düzenlemeyin ve bunun yerine yeni bir cevap açın.
Eriawan Kusumawardhono

Tamam @EriawanKusumawardhono sizin için bir sorunsa özür dilerim. Bu şekilde okuyucular daha fazla ayrıntıyı doğrudan alır ve bu, yanıtın kullanışlılığını artırır, ekstra ayrıntıları ve ekran görüntülerini kaldırmamı ister misiniz?
NDepend ekibinden Patrick

@PatrickfromNDependteam ekstra ayrıntılar ve ekran görüntüleri tamam. ama aslında bu benim cevabım olduğu için, düzenlemeniz beni bir şekilde NDepend'te çalışıyormuşum gibi gösteriyor gibi görünüyor. Lütfen düzenlemenize yeni cevap ekleyin ve ayrıca yeni cevabınızın cevabıma ek olduğunu vurgulayın. Teşekkür önce :)
Eriawan Kusumawardhono

170

Benzer bir şeye ihtiyacım vardı, ancak bunu yapmak için bir araç için ödeme yapmak (veya yüklemek) istemedim. Ben proje başvuruları geçer hızlı bir PowerShell komut dosyası oluşturulur ve bir onları tükürür yuml.me yerine dost-formatında:

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
müthiş. Bunu aldım ve tüm alt projelerden geçecek şekilde genişlettim, ardından tüm projeyi haritalamak için bir sln dosyası almak için tekrar genişlettim. Teşekkürler
Jon

Bu, Visual Studio'nun hangi sürümleriyle çalışır? Ayrıca, C # projeleri yerine C ++ 'yı görselleştirmek için .csproj dosya sonekini .vcproj olarak değiştirmek yeterli mi? VS 2005 ile burada çalışıyorum ve boş bir sonuç dosyası alıyorum ...
ssc

1
C # için 2010 projesine karşı yazılmıştı, ancak muhtemelen bir C ++ projesinin içindeki XML'e bakarak ve kodu ayarlayarak bunu gerçekten kolayca değiştirebilirsin :-)
Danny Tuppeny

5
@ssc Blogumda, ayarlaması daha kolay olabilecek biraz güncellenmiş kod var: blog.dantup.com/2012/05/…
Danny Tuppeny

5
Eğer PowerShell 2.0 kullanıyorsanız, eklemek gerekir =$trueetmek Mandatoryve ValueFromPipelineparametreler
MoMo

79

Güncelleme: ReSharper, sürüm 8'de yerleşik 'Proje Bağımlılıklarını Görüntüle' özelliğine sahiptir.

ReSharper sürüm <8, yFiles görüntüleyiciyi kullanırken bağımlılık grafiklerini göstermek için Dahili özelliğe sahiptir . Gönderinin altındaki hızlı kılavuza bakın.

görüntü açıklamasını buraya girin

Nasıl

  1. YEd aracını buradan yükleyin .
  2. VS'yi /resharper.internal komut satırı bağımsız değişkeniyle çalıştırın.
  3. ReSharper / Dahili / Bağımlılıkları Göster'e gidin.
  4. 'Büyük resme' dahil etmek istediğiniz projeleri belirtin.
  5. İhtiyacınız olmadıkça 'Terminal düğümlerini dışla ...' seçeneğinin işaretini kaldırın.
  6. 'Göster'e basın.
  7. YEd'de hiyerarşik düzen kullanın (Alt + Shift + H)
  8. Geri bildirim sağlayın =)


5
Resharper> Mimari> 'Proje Bağımlılık
Şemasını

32

Visual Studio 2010 Ultimate kullanarak kolayca bir proje bağımlılık grafiği edinebilirsiniz, nasıl yapıldığını görmek için bu videoyu 5 dakikaya kadar tarayabilirsiniz: http://www.lovettsoftware.com/blogengine.net/post/2010/05/27/Architecture-Explorer .aspx

Visual Studio 2010 Ultimate'da: Mimari | Bağımlılık Grafiği Oluşturun | Meclis tarafından.



1
Denedim, bir istisna attı. Görünüşe göre MS bunu birkaç proje dışında hiçbir şeyle test etmemiş. Bence kesinlikle değersiz.
C Johnson

1
Sadece bu değil, aynı zamanda korkunç derecede yavaş. Yapabilseydim bunu -10 yapardım. Kendi proje bağımlılık yürüteçimi yazdım (Kendi derleme sistemimiz için) ve görsel stüdyodakine kıyasla çok hızlıydı.
C Johnson

@CJohnson Yavaş olduğunu ve büyük çözümler için istisnalar atmaya eğilimli olduğunu kabul ediyorum, ancak yine de hiç yoktan iyidir. Tüm uygulamaları kapatarak, bazı hizmetleri durdurarak ve Visual Studio'yu yeniden başlatarak çalışmasını sağladım.
WynandB

Benim için büyük çözümler, milyonlarca satır kod içeren yaklaşık 600 projedir. Birkaç hizmeti durdurmanın benim için kabul edilebilir bir çözüm olma ihtimali yok.
C Johnson

20

Sana yardımcı olabilecek bir araç yazdım. VS Solution Dependency Visualizer, bir çözüm içindeki proje bağımlılıklarını analiz eder ve bu bilgilerden bir bağımlılık grafiği ve bir metin raporu oluşturur.


Visual Studio'nun hangi sürümleri ve bu ne tür projelerle çalışır? VS 2005 / C ++ burada ve araç hiçbir şey yapmıyor gibi görünüyor ...
ssc

kesinlikle vs 2008/2010 ve .csproj / .vbproj ile çalışır. vs2005 ile test edilmedi, ancak şu anda .vcproj dosyaları tanınmıyor
devio

Bu araç, analiz ettikten sonra yalnızca çözüm dosyasını gösterir :-(. Yaklaşık 300 projem değil.
thersch

@thersch eğer bir göz atmamı istiyorsanız, lütfen zip .sln ve proje dosyalarını (böylece orijinal dizin yapısı korunur), bir dosya paylaşımına yükleyin ve blogum aracılığıyla benimle iletişime geçin. thx
devio

9

Benzer bir sorun yaşadım, ancak daha da karmaşıktı çünkü birkaç proje aynı derlemenin farklı sürümlerine referans veriyordu.

Sürüm bilgilerini içeren bir çıktı almak ve olası çalışma zamanı derleme yükleme sorunlarını kontrol etmek için şu aracı yaptım:

https://github.com/smpickett/DependencyViewer

(github sürümüne doğrudan bağlantı: https://github.com/smpickett/DependencyViewer/releases )


1
Güzel alet! Basit ve verimli. Bunun için teşekkürler! Benden +1.
Buka

Gerçekten harika bir araç! Yıllarca böyle bir şeyin hayalini kurdum. Paylaştığınız için çok teşekkür ederim
alehro

8

VS 2010 Ultimate'da projelerinizin bağımlılık grafiğini oluşturabilirsiniz. Mimari Gezgini, çözümünüze göz atmanıza, projeleri ve görselleştirmek istediğiniz ilişkileri seçmenize ve ardından seçiminizden bir bağımlılık grafiği oluşturmanıza olanak tanır.

Daha fazla bilgi için aşağıdaki konulara bakın:

Nasıl yapılır: Koddan Grafik Belgeleri Oluşturma : http://msdn.microsoft.com/en-us/library/dd409453%28VS.100%29.aspx#SeeSpecificSource

Nasıl yapılır: Mimari Gezgini Kullanarak Kod Bulma : http://msdn.microsoft.com/en-us/library/dd409431%28VS.100%29.aspx

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

Visual Studio 2010 Mimari Keşif ve Modelleme Araçları forumu: http://social.msdn.microsoft.com/Forums/en-US/vsarch/threads


VS 2012 Professional da mı? Veya sadece VS 2012 Ultimate?
Kiquenet

@Kiquenet VS 2012 Ultimate'da bağımlılık grafikleri oluşturabilirsiniz. Premium ve Pro'da açıp sınırlı değişiklikler yapabilirsiniz.
Esther Fan - MSFT

5

NDepend tarafından oluşturulan grafiklerde eriawan cevabını tamamlamak için aşağıdaki ekran görüntülerine bakın. Şunları yapabilirsiniz indirmek ve ücretsiz deneme sürümünü kullanmak bir süre NDepend arasında.

NDependent Dependency Graph hakkında daha fazla bilgi görüntü açıklamasını buraya girin

NDepend Dependency Matrix hakkında daha fazla bilgi : görüntü açıklamasını buraya girin

Sorumluluk reddi beyanı: Takım ekibinin bir parçasıyım


NDepend .NET içindir, CppDepend klonu C ++ içindir ve .vcxproj dosyalarıyla çalışır
Patrick, NDepend ekibinden

5

Powershell çözümü en iyisidir. Bunu makinemde (TM) çalışan bir bash betiğine uyarladım:

#!/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, bağımlılık grafiği modülünü Kod Haritası olarak yeniden adlandırdı

resmi belgeler burada: https://docs.microsoft.com/en-us/visualstudio/modeling/map-dependencies-across-your-solutions?view=vs-2019


"Kod haritalarını oluşturmak ve düzenlemek için Visual Studio Enterprise sürümüne ihtiyacınız var. Visual Studio Community ve Professional sürümlerinde, Enterprise sürümünde oluşturulan diyagramları açabilirsiniz ancak bunları düzenleyemezsiniz."
MatthewT

1

Danny Tuppeny'den PS Script'in bu genişletilmiş sürümü hem Proje hem de Dış referansları gösterir:

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'de açılabilen ve analiz edilebilen iki nokta üst üste ile ayrılmış bir dosya verecektir.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.