2008-09-25 23 views
7

वीबी.नेट (या सी #) में मैं प्रोग्रामेटिक रूप से कैसे निर्धारित कर सकता हूं यदि कक्षा में एक सार्वजनिक चर किसी भी परियोजना के भीतर कहीं भी इस्तेमाल किया जाता है?आप कैसे जांचते हैं कि एक प्रोग्राम प्रोग्राम में प्रोग्राम का उपयोग किया जाता है या नहीं?

+2

एक तरीका जो प्रोग्रामेटिक नहीं है: चर को टिप्पणी करें और संकलन का प्रयास करें :-) – torial

उत्तर

2

से MSDN

ढूँढें वस्तु आप के लिए खोज और वातावरण है कि इस तरह के कोड संपादक के रूप में इस तरह के संचालन, समर्थन के स्थानों में पाठ बदलने के लिए अनुमति देता है।

यह मुख्य रूप से मैक्रो रिकॉर्डिंग उद्देश्यों के लिए है। संपादक की मैक्रो रिकॉर्डिंग तंत्र TextSelection.FindPattern की बजाय खोजें का उपयोग करती है ताकि आप वैश्विक खोज कार्यक्षमता को खोज सकें, और क्योंकि यह आमतौर पर टेक्स्ट-चयन ऑब्जेक्ट का उपयोग करने के लिए खोज-इन-फाइल्स जैसे ऑपरेशन के लिए अधिक उपयोगी है।

यदि खोज ऑपरेशन असीमित है, जैसे सभी खोजें, तो FindDone ईवेंट तब होता है जब ऑपरेशन पूर्ण हो जाता है।

Sub ActionExample() 
    Dim objFind As Find = objTextDoc.DTE.Find 

    ' Set the find options. 
    objFind.Action = vsFindAction.vsFindActionFindAll 
    objFind.Backwards = False 
    objFind.FilesOfType = "*.vb" 
    objFind.FindWhat = "<Variable>" 
    objFind.KeepModifiedDocumentsOpen = False 
    objFind.MatchCase = True 
    objFind.MatchInHiddenText = True 
    objFind.MatchWholeWord = True 
    objFind.PatternSyntax = vsFindPatternSyntax.vsFindPatternSyntaxLiteral 
    objFind.ResultsLocation = vsFindResultsLocation.vsFindResultsNone 
    objFind.SearchPath = "c:\<Your>\<Project>\<Path>" 
    objFind.SearchSubfolders = False 
    objFind.Target = vsFindTarget.vsFindTargetCurrentDocument 
    ' Perform the Find operation. 
    objFind.Execute() 
End Sub 



<System.ContextStaticAttribute()> _ 
Public WithEvents FindEvents As EnvDTE.FindEvents 

Public Sub FindEvents_FindDone(ByVal Result As EnvDTE.vsFindResult, _ 
           ByVal Cancelled As Boolean) _ 
           Handles FindEvents.FindDone 
    Select Case Result 
     case vsFindResultFound 
      'Found! 
     case else 
      'Not Found 
    Ens select 
End Sub 
0

आपको प्रतिबिंब का उपयोग करने की आवश्यकता होगी और यह जटिल होगा।

आप इस प्रोग्रामेटिक तरीके से क्यों कर रहे हैं? आप जानते हैं कि विजुअल स्टूडियो में "सभी संदर्भ खोजें" सुविधा है जो आपके लिए यह कर सकती है।

3

सभी संदर्भ खोजें आपका मित्र है।

0

परावर्तक का विश्लेषण विशेषता है। या, क्या यह कुछ प्रकार की रन टाइम कार्यक्षमता है जिसके बाद आप हैं?

0

क्या आप कोड संकलित होने से पहले ऐसा करने के बारे में बात कर रहे हैं? एक संकलित असेंबली के खिलाफ ऐसा करना संभवतः छोटा नहीं होगा, हालांकि Mono.Cecil जैसे टूल मदद कर सकते हैं। आपको वास्तव में प्रत्येक विधि को चलना होगा और संपत्ति के प्राप्त करने और सेट विधियों को सेट करने के लिए कॉल के लिए आईएल निर्देशों का निरीक्षण करना होगा। हालांकि वास्तव में यह बुरा नहीं हो सकता है, खासकर यदि आपने सिस्टम के बजाय सेसिल का उपयोग किया है। रिफ्लेक्शन। सेसिल भी बहुत तेज़ है, क्योंकि यह असेंबली को वास्तव में एप्लिकेशन डोमेन में लोड करने की बजाए फ़ाइलों के रूप में मानता है।

यदि आप इसे किसी परियोजना के वास्तविक स्रोत कोड पर चलाने के लिए चाहते हैं तो बहुत अलग हैं। मुझे विजुअल स्टूडियो ऐड-इन्स के बारे में बहुत कुछ पता नहीं है, लेकिन आप प्रोग्राम्सैटिक रूप से "सभी संदर्भ ढूंढें" कमांड का आह्वान कर सकते हैं और परिणामों का उपयोग कर सकते हैं।

सिस्टम में कुछ भी हो सकता है। कोडडॉम जो मदद कर सकता है। ऐसा लगता है कि CodeCompileUnit में कोड को पार्स करने के लिए आप CodeParser का उपयोग कर सकते हैं, और फिर वहां से सभी विधियों में सभी कथन चलते हैं और संबंधित CodePropertyReferenceExpression एस की जांच करते हैं।