كيف يمكنك التحقق إذا كان متغير المستخدمة في المشروع برمجيا ؟
سؤال
في 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
, ثم من هناك سيرا على الأقدام جميع البيانات في كل من أساليب التحقق ذات الصلة CodePropertyReferenceExpression
s.