كيف يمكنك التحقق إذا كان متغير المستخدمة في المشروع برمجيا ؟

StackOverflow https://stackoverflow.com/questions/136829

سؤال

في VB.NET (أو C#) كيف يمكنني تحديد برمجيا إذا كان متغير عام في الدرجة مساعد.vb هو استخدامها في أي مكان داخل المشروع ؟

هل كانت مفيدة؟

المحلول

من MSDN

العثور على كائن يسمح لك للبحث عن استبدال النص في الأماكن البيئة التي تدعم مثل هذه العمليات ، مثل محرر التعليمات البرمجية.

والمقصود في المقام الأول من أجل تسجيل الماكرو الأغراض.المحرر تسجيل الماكرو آلية يستخدم تجد بدلا من TextSelection.FindPattern بحيث يمكنك اكتشاف العالمية العثور على وظيفة ، لأنه عموما هو أكثر فائدة من استخدام TextSelection كائن مثل هذه العمليات كما تجد في الملفات.

إن عملية البحث غير متزامن ، مثل العثور على كل شيء ، ثم 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

نصائح أخرى

إيجاد جميع المراجع هو صديقك.

سوف تحتاج إلى استخدام التفكير أنه سيكون معقدا.

لماذا تفعل هذا programmaticly?أنت تعرف أن Visual Studio قد "تجد جميع الإشارات" الميزة التي يمكن أن تفعل ذلك بالنسبة لك.

عاكس لديه تحليل الميزة.أو, هل هذا نوع من تشغيل الوظائف في الوقت أنت بعد ؟

تتحدث عن فعل هذا قبل أن يتم ترجمة التعليمات البرمجية?فعل هذا ضد جمعت الجمعية قد لا تكون تافهة ، على الرغم أدوات مثل أحادية.سيسيل يمكن أن تساعد.سيكون لديك على المشي في الواقع كل طريقة وتفتيش IL تعليمات يدعو إلى الحصول على مجموعة من أساليب الممتلكات المعنية.قد لا يكون في الواقع سيئة على الرغم خاصة إذا كنت تستخدم سيسيل بدلا من النظام.انعكاس.سيسيل هو أيضا أسرع بكثير ، كما يعامل الجمعيات الملفات بدلا من الواقع تحميلها في مجال التطبيق.

إذا كنت ترغب في تشغيل هذا على شفرة المصدر الفعلي للمشروع الأمور مختلفة كثيرا.أنا لا أعرف الكثير حول Visual Studio Add-Ins, ولكن كنت قد تكون قادرة على استدعاء "تجد جميع الإشارات" الأمر برمجيا واستخدام النتائج.

قد يكون هناك أيضا شيء في النظام.CodeDom التي يمكن أن تساعد.يبدو أنك يمكن أن تستخدم CodeParser تحليل رمز إلى CodeCompileUnit, ثم من هناك سيرا على الأقدام جميع البيانات في كل من أساليب التحقق ذات الصلة CodePropertyReferenceExpressions.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top