.NET

2008-11-20 22 views
6

में नामस्थानों के बीच निर्भरताओं का पता लगाना क्या ऐसी कोई सुविधाएं हैं जो प्रबंधित असेंबली के एक सेट की जांच कर सकती हैं और आपको बताती हैं कि एक नामस्थान में से किसी भी प्रकार किसी अन्य पर निर्भर करता है या नहीं? उदाहरण के लिए, कहें कि मेरे पास MyApp.BusinessRules नेमस्पेस है और यह MyApp.GUI में सीधे कुछ भी एक्सेस नहीं करना चाहता, लेकिन दोनों नामस्थान एक ही असेंबली में हैं। मेरा लक्ष्य कस्टम एमएसबिल्ड कार्य लिखने में सक्षम होना है जो सत्यापित करता है कि विभिन्न युग्मन नियमों को तोड़ा नहीं गया है।.NET

अभी तक एकमात्र ऐसा टूल जो मैंने देखा है, ऐसा लगता है कि यह NDepend है, लेकिन मुझे आश्चर्य है कि कोई आसान समाधान है या नहीं।

+0

आप इस बारे में अधिक जानकारी मिली थी, या इस बिल्ड काम बनाने में सफल हो? मुझे इस विशिष्ट सुविधा में बहुत दिलचस्पी है। – MHGameWork

उत्तर

1

अब तक एकमात्र ऐसा टूल जो मैंने देखा है ऐसा लगता है कि ऐसा हो सकता है यह एनडीपेन्स है, लेकिन मुझे आश्चर्य है कि कोई आसान समाधान है या नहीं।

मैं उपकरण NDepend के डेवलपर में से एक हूं। कृपया आप हमें बता सकते हैं कि आप NDepend में जटिल क्या पाते हैं और आप अपने लिए एक आसान समाधान की कल्पना कैसे करते हैं?

NDepend आप क्या चाहते करने के लिए 3 अलग अलग तरीकों के साथ आता है: Dependency Matrix, Dependency Graph और भी आप कुछ Code Rule over LINQ Query (CQLinq) और detect cycle between namespaces के लिए नियम कुछ विशेष निर्भरता लिखते हैं, या लागू कर सकते हैं।

उदाहरण के लिए, मैं एक MyApp.BusinessRules नाम स्थान है और यह सीधे MyApp.GUI में कुछ भी उपयोग करने के लिए नहीं चाहते हैं कि, लेकिन दोनों नामस्थान एक ही विधानसभा में हैं।

कि के लिए, निम्न CQLinq नियम लिखा जा सकता है, यह उस ?: से किसी भी सरल हो सकता है

warnif count > 0 
let businessRules = Application.Namespaces.WithNameLike("^MyApp.BusinessRules") 
let gui = Application.Namespaces.WithNameLike("^MyApp.GUI") 

from n in businessRules.UsingAny(gui) 
let guidNamespacesUsed = n.NamespacesUsed.Intersect(gui) 
select new { n, guidNamespacesUsed } 
+0

नामस्थानों ने इसका मूल्यांकन करने के लिए कुछ समय पहले NDepend डाउनलोड किया था। सीखने के लिए बहुत कुछ है और मैं अभी भी मैट्रिक्स के अर्थ के साथ पकड़ने जा रहा हूं। मुझे यह देखने में दिलचस्पी होगी कि क्या मैं नेमस्पेस के बीच विशिष्ट निर्भरताओं को क्वेरी करने के लिए सीक्यूएल लिख सकता हूं। –

+0

मार्क, मैंने अपने उत्तर को नए NDepend v4 CQLinq क्षमताओं के साथ दोबारा प्रतिक्रिया दी। उम्मीद है कि अब आप इस प्रश्न में जो भी मांग रहे हैं, वह करना आसान नहीं रहा है। –

3

मुझे संदेह है कि एनडेंड पर जाने के लिए, ईमानदार होने का सबसे आसान तरीका होने वाला है।

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

+0

हां, मैं असेंबली को तोड़ना चाहता हूं, लेकिन जब आप अपने समाधान में 40 से अधिक परियोजनाएं शुरू करते हैं तो विज़ुअल स्टूडियो वास्तव में खराब होता है (विशेष रूप से जब आपकी देव मशीन 5 साल पुरानी हो) –

+0

आपको बनाने में सक्षम होना चाहिए तब आपके देव मशीन के अपडेट के लिए मामला ... और इस बारे में सोचें कि आपको उसी समाधान में उन सभी परियोजनाओं की आवश्यकता है या नहीं। ऐसा लगता है कि आपके पास 1 प्रोजेक्ट है जो दो होना चाहिए - क्या आपके पास अन्य हैं जिन्हें संयुक्त किया जाना चाहिए? –

+0

अच्छी तरह से यह एक बड़ा WinForms निष्पादन योग्य है जो 8 या 9 उप-अनुप्रयोगों को होस्ट करता है, इसलिए एक बार जब आप साझा कोड को पुन: प्रयोज्य घटकों में फैक्टर कर चुके हैं और कुछ इकाई परीक्षण असेंबली जोड़े हैं, तो परियोजनाओं की संख्या काफी अधिक हो जाती है। –

0

परावर्तक यह करता है।

नामस्थान पर राइट क्लिक करें, विश्लेषण करें, व्हायोला! :)

+0

एक उपयोगी टिप है, लेकिन ऐसा लगता है कि मेरे नेमस्पेस पर कौन से असेंबली निर्भर करती हैं, न कि –

2

आप नेट परावर्तक के लिए DSM plugin साथ नाम स्थान निर्भरता विश्लेषण कर सकते हैं (मैं अपने डेवलपर)

एक बार असेंबली का विश्लेषण करने के बाद आप परियोजना को एक फ़ाइल में सहेज सकते हैं। इस फ़ाइल में एक सरल संरचना के साथ सिर्फ एक्सएमएल ताकि आप कस्टम विश्लेषण के लिए एक स्क्रिप्ट के लिए इसे पारित कर सकते हैं

[अपडेट]: इस प्लगइन एक दृश्य स्टूडियो के रूप में जोड़ें-इन

+0

यह प्लगइन बहुत बढ़िया है, मैं अभी इसे एक बड़े पैमाने पर प्रोजेक्ट का विश्लेषण और पुन: उपयोग करने के लिए उपयोग कर रहा हूं और यह आपको आवश्यक जानकारी प्रदान करता है। धन्यवाद! – Dave

1

में अब उपलब्ध है आप कर सकते हैं .NET कोड के लिए निर्भरता ग्राफ उत्पन्न करने के लिए विजुअल स्टूडियो 2010 अल्टीमेट की आरसी रिलीज आज़माएं। आप अपने सभी असेंबली, नामस्थान, कक्षाओं या इनमें से कुछ संयोजन का ग्राफ उत्पन्न कर सकते हैं, या आप विशिष्ट कलाकृतियों और रिश्तों को चुनने के लिए आर्किटेक्चर एक्सप्लोरर का उपयोग कर सकते हैं जिन्हें आप कल्पना करना चाहते हैं।

तुम भी मौजूदा कलाकृतियों निर्भरता रेखांकन से या से परत चित्र बना सकते हैं, की अनुमति दी निर्भरता आकर्षित है, और फिर परत सत्यापन यकीन है कि अवैध निर्भरता बनाने के लिए MSBuild की प्रक्रिया के हिस्से के रूप में पेश नहीं कर रहे हैं शामिल हैं:

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

आप खड़ी वर्गों या कोड का "स्लाइस" है कि आप वास्तुकला एक्सप्लोरर का उपयोग करके कल्पना करने के लिए चाहते हैं का चयन कर सकते हैं। आप Visual Studio समाधान या संकलित प्रबंधित कोड में .dll फ़ाइलों या .exe फ़ाइलों में स्रोत कोड का पता लगा सकते हैं। आप अतिरिक्त प्रदाताओं को स्थापित करके अन्य डोमेन ब्राउज़ करने के लिए आर्किटेक्चर एक्सप्लोरर का उपयोग कर सकते हैं। जब आपको वह कोड मिलता है जिसे आप विज़ुअलाइज़ करना चाहते हैं, तो आप उस कोड में रिश्तों का पता लगाने के लिए आलेख उत्पन्न कर सकते हैं।

कैसे करें: आपके सिस्टम की उच्च स्तरीय वास्तुकला कल्पना करने के लिए http://msdn.microsoft.com/en-us/library/dd465141%28VS.100%29.aspx

... उपयोग परत चित्र और कि कोड इस का अनुपालन को सत्यापित करने के: कलाकृतियों से परत चित्र बनाएं डिज़ाइन। इस कार्य को करने के लिए, विज़ुअल स्टूडियो समाधान से लॉजिकल, सार समूह या परतों में कलाकृतियों को व्यवस्थित और संबद्ध करें। ये परतें प्रमुख कार्यों का वर्णन करती हैं जो ये कलाकृतियों का प्रदर्शन करती हैं या आपके सिस्टम के प्रमुख घटक हैं। परतों के बीच तीर इन कलाकृतियों के बीच विद्यमान निर्भरता का प्रतिनिधित्व करते हैं या मौजूद होना चाहिए। कोड पर आर्किटेक्चरल बाधाओं को लागू करने के लिए, आरेख पर इच्छित निर्भरताओं का वर्णन करें और फिर आरेख के विरुद्ध कोड को सत्यापित करें। इस तरीके से परत आरेखों का उपयोग करके, आप कोड को समझने, पुन: उपयोग करने और बनाए रखने में आसान बनाने में मदद कर सकते हैं।

Layer Diagram http://i.msdn.microsoft.com/Dd465141.UML_LayerRefReading(en-us,VS.100).png

कैसे करें: मान्य कोड लेयर आरेख के खिलाफ: http://msdn.microsoft.com/en-us/library/dd409395%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

संबंधित मुद्दे

 संबंधित मुद्दे