दृश्य स्टूडियो परियोजनाओं की निर्भरता ग्राफ


130

मैं वर्तमान में VS 2005 + .NET 2.0 से VS 2008 + .NET 3.5 के लिए एक बड़ा समाधान (~ 70 परियोजनाओं) की ओर पलायन कर रहा हूं। वर्तमान में मेरे पास वीएस 2008 + .NET 2.0 है।

समस्या यह है कि मुझे परियोजनाओं को एक-एक करके नए .NET फ्रेमवर्क में स्थानांतरित करना होगा ताकि यह सुनिश्चित हो सके कि कोई .NET 2.0 परियोजना संदर्भ .NET 3.5 परियोजना न हो। क्या कोई उपकरण है जो मुझे परियोजना निर्भरता का एक अच्छा ग्राफ देगा?

जवाबों:


39

क्या आपने एनडिपेंडेंट की कोशिश की है? यह आपको निर्भरता दिखाता है और आप अपनी कक्षाओं और विधियों की उपयोगिता का विश्लेषण भी कर सकते हैं।

उनकी वेबसाइट:

http://ndepend.com


अप्रैल 2020 में @Eriawan उत्तर को पूरा करने के लिए निर्भर संस्करण 2020.1 एनडिपेंडेंसी ग्राफ पूरी तरह से पुनर्निर्माण के साथ जारी किया गया है। यह अब सैकड़ों परियोजनाओं से बने बड़े समाधानों पर तराजू देता है और कई नेविगेशन सुविधाएं प्रदान करता है।

यहाँ NopCommerce OSS प्रोजेक्ट पर ऐसा दिखता है ।

NopCommerce पर निर्भरता निर्भरता ग्राफ

यह वही है जो संपूर्ण .NET कोर 3 क्लासेस लाइब्रेरी (176 असेंबली) पर दिखता है।

यहाँ लिंक विवरण दर्ज करें

डिस्क्लेमर: मैं एनडिपेंडेंट पर काम करता हूं


3
मूल पोस्टर ने यह नहीं कहा कि निर्भरता मुक्त थी और यह समस्या को हल करती है।
क्रिस्टन सम्मान

6
हो सकता है कि यह उत्तर लिखने के समय मुक्त हो गया हो, लेकिन अब ऐसा नहीं है।
लेवेंट कोनजे

@ पैट्रिक-से-निर्भर-टीम कृपया सीधे मेरे उत्तर को संपादित न करें और इसके बजाय एक नया उत्तर खोलें।
एरियन कुसुमावर्धनो

ठीक है @EriawanKusumawardhono क्षमा करें यदि यह आपके लिए एक समस्या है। इस तरह से पाठकों को सीधे विवरण मिलते हैं और इससे उत्तर उपयोगिता में सुधार होता है, क्या आप चाहते हैं कि मैं अतिरिक्त विवरण और स्क्रीनशॉट हटा दूं?
ND पर निर्भर टीम से

@PatrickfromNDpretteam अतिरिक्त विवरण और स्क्रीनशॉट ठीक हैं। लेकिन चूंकि यह मूल रूप से मेरा उत्तर है, ऐसा लगता है कि आपका संपादन किसी तरह मुझे बना देता है, मुझे एनडीपेंड पर काम की तरह दिखता है। कृपया अपने संपादन के साथ नया उत्तर जोड़ें, और मेरे उत्तर के अतिरिक्त अपने नए उत्तर पर जोर दें। :) से पहले धन्यवाद
एरियन कुसुमावर्धनो

169

मुझे कुछ इसी तरह की जरूरत थी, लेकिन इसे करने के लिए एक उपकरण का भुगतान (या स्थापित) नहीं करना चाहता था। मैंने एक त्वरित पॉवरशेल स्क्रिप्ट बनाई जो प्रोजेक्ट संदर्भों के माध्यम से जाती है और उन्हें 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 फ़ाइल लेने के लिए इसे फिर से बढ़ाया। साभार
जॉन

विजुअल स्टूडियो के कौन से संस्करण इसके साथ काम करते हैं? इसके अलावा, C # प्रोजेक्ट्स के बजाय C ++ की कल्पना करने के लिए .cproroj फ़ाइल प्रत्यय को .vcproj में बदलना पर्याप्त है? यहां वीएस 2005 के साथ काम करना और मुझे एक खाली परिणाम फ़ाइल मिलती है ...
ssc

1
यह C # के लिए 2010 के एक प्रोजेक्ट के खिलाफ लिखा गया था, लेकिन आप शायद इसे C ++ प्रोजेक्ट के अंदर XML को देखकर और कोड को एडजस्ट करके आसानी से इसे आसानी से ट्वीक कर सकते हैं :-)
Danny Tuppeny

5
@ssc मेरे ब्लॉग पर थोड़ा अपडेट किया गया कोड है जिसे ट्विक
Danny Tuppeny

5
यदि आप Powershell 2.0 का उपयोग कर रहे हैं, तो आपको =$trueMandatoryValueFromPipeline
MoMo

79

अपडेट: संस्करण 8 के बाद से रीशपर में 'प्रोजेक्ट डिपेंडेंसी देखें' फीचर है।

ReSharper संस्करण <8 में yFiles दर्शक का उपयोग करने में निर्भरता ग्राफ दिखाने के लिए आंतरिक सुविधा है। पोस्ट के निचले भाग में त्वरित मैनुअल देखें।

यहाँ छवि विवरण दर्ज करें

कैसे

  1. यहां से yEd टूल इंस्टॉल करें
  2. /Resharper.internal कमांड लाइन तर्क के साथ VS चलाएँ।
  3. ReSharper / आंतरिक / शो निर्भरता पर जाएं।
  4. उन परियोजनाओं को निर्दिष्ट करें जिन्हें आप 'बड़ी तस्वीर' में शामिल करना चाहते हैं।
  5. जब तक आपको इसकी आवश्यकता न हो, 'टर्मिनल नोड्स को बाहर निकालें ...' को अनचेक करें।
  6. 'दिखाएँ' दबाएँ।
  7. YEd (Alt + Shift + H) में पदानुक्रमित लेआउट का उपयोग करें
  8. प्रतिक्रिया देना =)

2
इसके अलावा Resharper> निरीक्षण> परियोजना पदानुक्रम परियोजनाओं वर्तमान पर संदर्भित की सूची प्राप्त करने
Lu55

5
Resharper> Architecture> 'Show Project Dependency Diagram'
डॉ। ब्लरहार्ड

32

आप विजुअल स्टूडियो 2010 अल्टीमेट का उपयोग करके आसानी से एक प्रोजेक्ट डिपेंडेंसी ग्राफ प्राप्त कर सकते हैं, इस वीडियो में 5 मिनट स्कैन करके देखें कि कैसे: http://www.lovettsoftware.com/blogengine.net/post/2010/05/27/Architecture-Explorer .aspx

विजुअल स्टूडियो 2010 अल्टीमेट में: आर्किटेक्चर | निर्भरता उत्पन्न करें | विधानसभा द्वारा।


@CJohnson आप C और C ++ कोड के लिए ऐसा कर सकते हैं यदि आपके पास Visual Studio 2010 फ़ीचर पैक 2 है । इसे भी देखें : C और C ++ कोड के लिए निर्भरता ग्राफ़ जेनरेट करें
एस्तेर फैन - MSFT

1
कोशिश की, एक अपवाद फेंक दिया। जाहिर तौर पर एमएस ने कुछ परियोजनाओं से परे कभी भी इसका परीक्षण नहीं किया। मेरी राय में बिल्कुल बेकार।
सी जॉनसन

1
इतना ही नहीं, यह बहुत ही धीमा है। अगर मैं कर सकता तो मैं यह -10 बना देता। मैंने अपना प्रोजेक्ट डिपेंडेंसी वॉकर (अपने स्वयं के बिल्ड सिस्टम के लिए) लिखा था और विजुअल स्टूडियो की तुलना में यह बहुत तेज़ था।
सी जॉनसन

@CJohnson मैं मानता हूं कि यह धीमा है और बड़े समाधान के लिए अपवाद फेंकने का खतरा है, लेकिन यह अभी भी कुछ नहीं से बेहतर है। मुझे सभी एप्लिकेशन बंद करने, कुछ सेवाओं को रोकने और विज़ुअल स्टूडियो को पुनरारंभ करने से काम करने के लिए मिला।
WynandB

मेरे लिए बड़े समाधान कोड की लाखों लाइनों के साथ लगभग 600 परियोजनाएं हैं। कोई मौका नहीं है कि कुछ सेवाओं को रोकना मेरे लिए एक स्वीकार्य कार्य है।
C जॉनसन

19

मैंने एक उपकरण लिखा है जो आपकी मदद कर सकता है। वीएस समाधान निर्भरता विज़ुअलाइज़र एक समाधान के भीतर परियोजना निर्भरता का विश्लेषण करता है और इस जानकारी से एक निर्भरता चार्ट बनाता है, साथ ही एक पाठ रिपोर्ट भी।


विजुअल स्टूडियो के कौन से संस्करण हैं और यह किस तरह की परियोजनाओं के साथ काम करता है? वीएस 2005 / सी ++ यहां पर और टूल कुछ भी करने के लिए नहीं लगता ...
'14

यह निश्चित रूप से 2008/2010 और .csproj / .vbproj बनाम के साथ काम करता है। vs2005 के साथ परीक्षण नहीं किया, लेकिन वर्तमान में .vcproj फ़ाइलों को मान्यता प्राप्त नहीं है
10-14

यह उपकरण विश्लेषण करने के बाद केवल समाधान फ़ाइल दिखाता है :-( मेरी 300 परियोजनाओं के बारे में नहीं।
thersch

@ विंग्सच यदि आप चाहते हैं कि मैं इस पर एक नज़र रखूँ, तो कृपया .sln और प्रोजेक्ट फाइल करें (ताकि मूल निर्देशिका संरचना संरक्षित रहे), इसे एक फ़ाइल शेयर पर अपलोड करें, और अपने ब्लॉग के माध्यम से मुझसे संपर्क करें। thx
devio

9

मेरे पास एक समान मुद्दा था, लेकिन यह और जटिल था क्योंकि कई परियोजनाएं एक ही विधानसभा के विभिन्न संस्करणों का संदर्भ दे रही थीं।

आउटपुट प्राप्त करने के लिए जिसमें संस्करण जानकारी और संभावित रनटाइम असेंबली लोडिंग समस्याओं के लिए जाँच शामिल है, मैंने यह उपकरण बनाया है:

https://github.com/smpickett/DependencyViewer

(जीथुब रिलीज का सीधा लिंक: https://github.com/smpickett/D dependencyViewer/releases )


1
अच्छा उपकरण! सरल और कुशल। उसके लिए धन्यवाद! मुझ से +1।
बुका

वास्तव में महान उपकरण! मैंने सालों तक ऐसा ही कुछ सपना देखा। इसे शेयर करने के लिए आपका बहुत-बहुत धन्यवाद!
एलेरो

8

आप वीएस 2010 अल्टीमेट में अपनी परियोजनाओं का एक निर्भरता ग्राफ बना सकते हैं। आर्किटेक्चर एक्सप्लोरर आपको अपने समाधान को ब्राउज़ करने देता है, परियोजनाओं और उन रिश्तों का चयन करता है जिन्हें आप कल्पना करना चाहते हैं, और फिर अपने चयन से एक निर्भरता ग्राफ बनाएं।

अधिक जानकारी के लिए, निम्नलिखित विषय देखें:

कैसे करें: कोड से ग्राफ दस्तावेज उत्पन्न करें : 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

आर सी डाउनलोड : http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=457bab91-5eb2-4b36-b0f4-d6f34683c62a

विज़ुअल स्टूडियो 2010 आर्किटेक्चरल डिस्कवरी एंड मॉडलिंग टूल्स फोरम: http://social.msdn.microsoft.com/Forums/en-US/vsarch/threads


वीएस 2012 प्रोफेशनल भी? या केवल वीएस 2012 अंतिम?
किकेनेट

@Kiquenet आप VS 2012 अल्टीमेट में निर्भरता ग्राफ बना सकते हैं। आप प्रीमियम और प्रो में सीमित परिवर्तन खोल सकते हैं और कर सकते हैं।
एस्तेर फैन - MSFT

5

एनडीपेंड द्वारा निर्मित ग्राफ़ पर एरियन उत्तर को पूरा करने के लिए नीचे स्क्रीनशॉट देखें। आप कुछ समय के लिए ND निर्भर के नि: शुल्क परीक्षण संस्करण को डाउनलोड और उपयोग कर सकते हैं ।

एनडिपेंडेंट डिपेंडेंसी ग्राफ पर अधिक यहाँ छवि विवरण दर्ज करें

ND निर्भरता मैट्रिक्स पर अधिक : यहाँ छवि विवरण दर्ज करें

डिस्क्लेमर: मैं टूल टीम का हिस्सा हूं


ND निर्भर .NET के लिए है, इसका क्लोन CDD निर्भर C ++ के लिए है और .vcxproj फ़ाइलों के साथ काम करता है
ND परावर्तक टीम

5

Powershell समाधान सबसे अच्छा है। मैंने इसे अपनी मशीन (टीएम) पर काम करने वाली बैश स्क्रिप्ट में बदल दिया:

#!/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-d dependencies-across- your-solutions? view = vs-2019


"कोड मैप बनाने और संपादित करने के लिए, आपको विजुअल स्टूडियो एंटरप्राइज संस्करण की आवश्यकता होती है। विजुअल स्टूडियो कम्युनिटी और प्रोफेशनल संस्करणों में, आप ऐसे डायग्राम खोल सकते हैं जो एंटरप्राइज एडिशन में बनाए गए थे, लेकिन आप उन्हें संपादित नहीं कर सकते।"
मैथ्यू जूल

1

डैनी टुप्पेनी से पीएस स्क्रिप्ट का विस्तारित संस्करण प्रोजेक्ट और बाहरी दोनों संदर्भों को दर्शाता है:

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"

यह कॉलन-सेपरेटेड फ़ाइल देगा जिसे एक्सेल में खोला और विश्लेषण किया जा सकता है।


-1

मैंने सभी उत्तरों की जाँच की है, लेकिन विकल्पों में से कोई भी मेरे लिए संतोषजनक नहीं था, इसलिए मैंने प्रोजेक्ट-प्रोजेक्ट निर्भरता का पूर्वावलोकन करने के लिए अपना टूल लिखा।

https://github.com/Audionysos/VSProjectReferencesViewer

यह प्रारंभिक चरण है लेकिन यह मेरी जरूरतों के लिए काम करता है :)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.