وحدات ماكرو Visual Studio رائعة [مغلق]
-
22-08-2019 - |
سؤال
في مناقشة مجتمعية صغيرة، ما هي بعض وحدات ماكرو Visual Studio الأساسية التي تستخدمها؟
لقد بدأت للتو في التعرف عليها، وأريد أن أسمع ما لا يستطيع البعض منكم العيش بدونه.
المحلول
واعتدت على توظيف الكثير من وحدات الماكرو في VS 2002/2003. ومن الأمثلة على ذلك إنشاء منطقة - أحب دائما دروسي إلى تقسيمها إلى المناطق التالية - "أعضاء الخاص"، "خصائص العامة"، "طرق العامة" و "أساليب خاصة". لذلك، لقد ماكرو تعيين إلى مفتاح الاختصار الذي يخلق هذه المناطق في أي ملف فئة جديدة.
وإعادة بيع ديون الدعم في VS 2005/2008 (ومرفق إضافة قصاصات رمز مشترك)، وكذلك استخدام الوظائف الإضافية مثل DXCore وSlickEdit تسمح لي للعمل دون الحاجة إلى إنشاء العديد من وحدات الماكرو بعد الآن.
نصائح أخرى
وأود أن أضيف الأزرار على شريط الأدوات وحدات الماكرو 3 التالية. كل سيستغرق النص المحدد حاليا في أي ملف، وجوجل (أو MSDN-هو، أو التدقيق الإملائي، ذلك). تشكل رمز أنيق لشريط الأدوات لإضافية نمط نقطة.
Private Const BROWSER_PATH As String = "C:\Program Files\Mozilla Firefox\firefox.exe"
Sub SearchGoogle()
Dim cmd As String
cmd = String.Format("{0} http://www.google.com/search?hl-en&q={1}", BROWSER_PATH, DTE.ActiveDocument.Selection.Text)
Shell(cmd, AppWinStyle.NormalFocus)
End Sub
Sub SearchMSDN()
Dim cmd As String
cmd = String.Format("{0} http://www.google.com/search?hl-en&q={1}+site%3Amsdn.microsoft.com", BROWSER_PATH, DTE.ActiveDocument.Selection.Text)
Shell(cmd, AppWinStyle.NormalFocus)
End Sub
Sub SpellCheck()
Dim cmd As String
cmd = String.Format("{0} http://www.spellcheck.net/cgi-bin/spell.exe?action=CHECKWORD&string={1}", BROWSER_PATH, DTE.ActiveDocument.Selection.Text)
Shell(cmd, AppWinStyle.NormalFocus)
End Sub
إظهار مدة البناء في نافذة الإخراج
ضع هذا الكود في وحدة EnvironmentEvents الخاصة بك.سيؤدي هذا إلى كتابة المدة مباشرة في نافذة الإنشاء لأي إجراء يتعلق بالحل (الإنشاء، إعادة البناء، التنظيف، النشر).
يمكنك تغيير وظيفة IsBuild لتحديد الإجراءات التي تريد رؤية هذه المعلومات لها.
Dim buildStart As Date
Private Function IsBuild(ByVal scope As EnvDTE.vsBuildScope, ByVal action As EnvDTE.vsBuildAction) As Boolean
Return scope = vsBuildScope.vsBuildScopeSolution
End Function
Private Sub BuildEvents_OnBuildBegin(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildBegin
If (IsBuild(Scope, Action)) Then
buildStart = Date.Now
End If
End Sub
Private Sub BuildEvents_OnBuildDone(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildDone
If (IsBuild(Scope, Action)) Then
Dim buildTime = Date.Now - buildStart
WriteToBuildWindow(String.Format("Build time: {0}", buildTime.ToString))
End If
End Sub
Private Sub WriteToBuildWindow(ByVal message As String)
Dim win As Window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)
Dim ow As OutputWindow = CType(win.Object, OutputWindow)
For Each owPane As OutputWindowPane In ow.OutputWindowPanes
If (owPane.Name.Equals("Build")) Then
owPane.OutputString(message)
Exit For
End If
Next
End Sub
إظهار صفحة البداية بعد إغلاق الحل (مع إبقاء Visual Studio مفتوحًا)
ضع هذا الكود في وحدة EnvironmentEvents الخاصة بك:
Private Sub SolutionEvents_AfterClosing() Handles SolutionEvents.AfterClosing
DTE.ExecuteCommand("View.StartPage")
End Sub
إخفاء صفحة البداية بعد فتح الحل
ضع هذا الكود في وحدة EnvironmentEvents الخاصة بك:
Private Sub SolutionEvents_Opened() Handles SolutionEvents.Opened
Dim startPageGuid As String = "{387CB18D-6153-4156-9257-9AC3F9207BBE}"
Dim startPage As EnvDTE.Window = DTE.Windows.Item(startPageGuid)
If startPage IsNot Nothing Then startPage.Close()
End Sub
سيؤدي هذان الأمران معًا إلى إخفاء الصفحة الرئيسية الخاصة بك عند فتح أحد الحلول.عند إغلاق الحل، تعود صفحة البداية.
أستخدم الاختصارات التالية الأقل شهرة في كثير من الأحيان:
- السيطرة + أدخل:أدخل سطرًا فارغًا أعلى السطر الحالي (وضع المؤشر هناك)
- السيطرة + التحول + أدخل:أدخل سطرًا فارغًا أسفل السطر الحالي (وضع المؤشر هناك)
- السيطرة + التحول + V:دورات حلقة الحافظة
الخطوط العريضة:طي التعريفات مع توسيع المناطق
هل تعمل في أحد تلك المحلات التجارية التي تصر على المناطق المحيطة بها كل شئ, ، بحيث لا تتمكن من رؤية أي رمز عند طي التعريفات؟
ما تحتاجه حقًا هو ماكرو قابل للانهيار إلى التعريفات ولكن مع توسيع المناطق، مثل هذا:
Sub CollapseToDefinitionsButExpandAllRegions()
DTE.ExecuteCommand("Edit.CollapsetoDefinitions")
DTE.SuppressUI = True
Dim objSelection As TextSelection = DTE.ActiveDocument.Selection
objSelection.StartOfDocument()
Do While objSelection.FindText("#region",
vsFindOptions.vsFindOptionsMatchInHiddenText)
Loop
objSelection.StartOfDocument()
DTE.SuppressUI = False
End Sub
ضع هذا في وحدة ماكرو عادية، وقم بتعيينه لمفتاح التشغيل السريع، وسيعود الرمز الخاص بك.
(باستثناء... إذا كنت تعمل مع بعض الأفراد الأشرار حقًا الذين يضعون المناطق داخل الأساليب، وهذا للأسف توسيع تلك الأساليب.إذا كان أي شخص يعرف طريقة لكتابة هذا لتجنب ذلك، فلا تتردد في التعديل.)
أدخل GUID، وهو رائع لعمل WiX، وأضفه إلى القائمة كزر أو كاختصار رئيسي.
Sub InsertGuid()
Dim objTextSelection As TextSelection
objTextSelection = CType(DTE.ActiveDocument.Selection(), EnvDTE.TextSelection)
objTextSelection.Text = System.Guid.NewGuid.ToString.ToUpper(New System.Globalization.CultureInfo("en", False))
End Sub
تنظيم الاستخدامات لجميع ملفات .cs في الحل - المؤلف الأصلي: com.djpark.
Sub OrganizeSolution()
Dim sol As Solution = DTE.Solution
For i As Integer = 1 To sol.Projects.Count
OrganizeProject(sol.Projects.Item(i))
Next
End Sub
Private Sub OrganizeProject(ByVal proj As Project)
For i As Integer = 1 To proj.ProjectItems.Count
OrganizeProjectItem(proj.ProjectItems.Item(i))
Next
End Sub
Private Sub OrganizeProjectItem(ByVal projectItem As ProjectItem)
Dim fileIsOpen As Boolean = False
If projectItem.Kind = Constants.vsProjectItemKindPhysicalFile Then
'If this is a c# file
If projectItem.Name.LastIndexOf(".cs") = projectItem.Name.Length - 3 Then
'Set flag to true if file is already open
fileIsOpen = projectItem.IsOpen
Dim window As Window = projectItem.Open(Constants.vsViewKindCode)
window.Activate()
projectItem.Document.DTE.ExecuteCommand("Edit.RemoveAndSort")
'Only close the file if it was not already open
If Not fileIsOpen Then
window.Close(vsSaveChanges.vsSaveChangesYes)
End If
End If
End If
'Be sure to apply RemoveAndSort on all of the ProjectItems.
If Not projectItem.ProjectItems Is Nothing Then
For i As Integer = 1 To projectItem.ProjectItems.Count
OrganizeProjectItem(projectItem.ProjectItems.Item(i))
Next
End If
'Apply RemoveAndSort on a SubProject if it exists.
If Not projectItem.SubProject Is Nothing Then
OrganizeProject(projectItem.SubProject)
End If
End Sub
طي كافة العقد من لوحة الحلول، مفيدة جدًا خاصة للمشاريع الكبيرة:
Public Module CollapseAllNodes
Sub RunCollapseAllNodes()
Dim UIHSolutionExplorer As UIHierarchy
UIHSolutionExplorer = DTE.Windows.Item(Constants.vsext_wk_SProjectWindow).Object()
' Check if there is any open solution
If (UIHSolutionExplorer.UIHierarchyItems.Count = 0) Then
Return
End If
' Get the top node (the name of the solution)
Dim UIHSolutionRootNode As UIHierarchyItem
UIHSolutionRootNode = UIHSolutionExplorer.UIHierarchyItems.Item(1)
CloseRecursif(UIHSolutionRootNode)
' Select the solution node, or else when you click
' on the solution windows scrollbar, it will synchronize the open document
' with the tree and pop out the corresponding node which is probably not
' what you want.
UIHSolutionRootNode.Select(vsUISelectionType.vsUISelectionTypeSelect)
End Sub
Function CloseRecursif(ByRef element)
For Each UIHChild In element.UIHierarchyItems()
CloseRecursif(UIHChild)
If (UIHChild.UIHierarchyItems.Expanded = True) Then
UIHChild.UIHierarchyItems.Expanded = False
End If
Next
End Function
End Module
وأنا استخدم جيف FormatToHtml وحدات الماكرو إذا أنا ذاهب ليكون اللصق مثال التعليمات البرمجية في بلوق وظيفة أو بريد إلكتروني.
وأنا أعمل مع الشاشات المزدوجة، وأجد ماكرو شارون تبديل تخطيط (من الشاشة 1 إلى تخطيط 2 رصد) لا تقدر بثمن تماما. عندما كنت في حاجة إلى أن الرجوع إلى صفحة ويب أو برنامج آخر أثناء الكتابة قليلا من التعليمات البرمجية، السيطرة، البديل، 1 للتبديل إلى تخطيط شاشة واحدة لديك ستوديو النوافذ البصرية. وبمجرد الانتهاء من ذلك، السيطرة، البديل، 2 للتبديل إلى تخطيط لرصد اثنين واحصل على كل ما تبذلونه من النوافذ الخلفية. رهيبة!
HTTP: / /www.invisible-city.com/sharon/2008/06/workstation-hack-visual-studio-on-2.html
وليس ماكرو من تلقاء نفسها، ولكنها مفيدة:
Public Sub WriteToOutputWindow(ByVal pane as String, ByVal Msg As String)
Dim owPane As OutputWindowPane
Dim win As Window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)
Dim ow As OutputWindow = win.Object
Try
owPane = ow.OutputWindowPanes.Item(pane)
Catch
owPane = ow.OutputWindowPanes.Add(pane)
End Try
If Not owPane Is Nothing Then
owPane.Activate()
owPane.OutputString(Msg & vbCrLf)
End If
End Sub
وأنا تعيينها التحول CTRL-G إلى ماكرو يقوم بإنشاء GUID في تنسيق التسجيل - وهذا هو مفيد لتحرير IDL
وأنا أعمل حاليا على مشروعين مختلفة مع معايير الترميز مختلفة، واحد يستخدم علامات لبدايات خط وآخر يستخدم مسافات. وهذا الماكرو تبديل بين المعيار الذي يستخدم على أساسها البيئة النشط حاليا:
Public Sub ToggleTabs()
If DTE.ActiveDocument.Language = "CSharp" Then
Dim currentSetting As Boolean = DTE.Properties("TextEditor", "CSharp").Item("InsertTabs").Value
DTE.Properties("TextEditor", "CSharp").Item("InsertTabs").Value = Not currentSetting
End If
If DTE.ActiveDocument.Language = "SQL" Then
Dim currentSQLSetting As Boolean = DTE.Properties("TextEditor", "SQL").Item("InsertTabs").Value
DTE.Properties("TextEditor", "SQL").Item("InsertTabs").Value = Not currentSQLSetting
End If
If DTE.ActiveDocument.Language = "HTML" Then
Dim currentHTMLSetting As Boolean = DTE.Properties("TextEditor", "HTML").Item("InsertTabs").Value
DTE.Properties("TextEditor", "HTML").Item("InsertTabs").Value = Not currentHTMLSetting
End If
If DTE.ActiveDocument.Language = "JScript" Then
Dim currentJScriptSetting As Boolean = DTE.Properties("TextEditor", "JScript").Item("InsertTabs").Value
DTE.Properties("TextEditor", "JScript").Item("InsertTabs").Value = Not currentJScriptSetting
End If
End Sub
وأنا لا يمكن أن ندع هذه المسألة يذهب دون أن يذكر <لأ href = "http://www.christophdebaene.com/blog/2006/11/21/visual-studio-net-macro-for-nesting-project- البنود / "يختلط =" noreferrer نوفولو "> هذا واحد . حتى أنه لديه شريط فيديو لإظهار كيفية تثبيت واستخدامها. هذا الماكرو ببساطة يسمح لك بإنشاء ملفات متداخلة في حل اكسبلورر (مثل resources.resx).
وتحرير: تم تحديث الرابط