Für eine kleine Community-Diskussion, was sind einige wichtige Visual Studio-Makros, die Sie verwenden?Awesome Visual Studio-Makros
Ich fing gerade an, über sie zu lernen, und will hören, was einige von Ihnen nicht ohne leben können.
Für eine kleine Community-Diskussion, was sind einige wichtige Visual Studio-Makros, die Sie verwenden?Awesome Visual Studio-Makros
Ich fing gerade an, über sie zu lernen, und will hören, was einige von Ihnen nicht ohne leben können.
Früher habe ich viel von Makros in VS 2002/2003 verwenden. Ein Beispiel wäre die Erstellung von Regionen - ich möchte meine Klassen immer in die folgenden Regionen unterteilen: "Private Mitglieder", "Öffentliche Eigenschaften", "Öffentliche Methoden" und "Private Methoden". Also habe ich einen Makro auf einen Shortcut-Key gemappt, der diese Regionen in jeder neuen Klassendatei erzeugt.
Refactoring-Unterstützung in VS 2005/2008 (und die Möglichkeit, allgemeine Code-Snippets hinzuzufügen) sowie die Verwendung von Addins wie DXCore und SlickEdit erlauben mir zu arbeiten, ohne zu viele Makros mehr erstellen zu müssen.
Was für eine seltsame Wahl für die akzeptierte Antwort. –
Ich habe Fremder gesehen. Sortieren Sie die Antworten nach Datum und Sie werden die Begründung sehen. ;-) – Cerebrus
Habe ich nicht viel Zeit gegeben, oder? –
I Ctrl-Shift-G zu einem Makro zugeordnet, die eine GUID in der Registry Format erzeugt - dies für die Bearbeitung von IDL nützlich ist
Ich benutze Jeffs FormatToHtml Makros, wenn ich ein Codebeispiel in einen Blogpost oder eine E-Mail einfügen werde.
GUID einfügen, ideal für WiX-Arbeit, zum Menü als Schaltfläche oder als Tastenkombination hinzufügen.
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
Organisieren usings für alle CS-Dateien in einer Lösung - Original-Autor: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
Ich füge Schaltflächen in der Symbolleiste für die folgenden 3 Makros hinzu. Jeder nimmt den aktuell ausgewählten Text in einer beliebigen Datei und googelt ihn (oder MSDN-it oder Rechtschreibprüfung). Erstellen Sie ein raffiniertes Symbol für die Symbolleiste für zusätzliche Stilpunkte.
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
Es gibt jetzt eine Rechtschreibprüfung Erweiterung, BTW. –
Ich arbeite mit zwei Monitoren, und ich finde, Sharons Layout-Schilt Makro (von 1 Monitor an ein 2-Monitor-Layout) völlig von unschätzbarem Wert. Wenn Sie eine Webseite oder ein anderes Programm referenzieren müssen, während Sie ein wenig Code eingeben, können Sie mit STRG-ALT-1 zu einem EIN-Monitor-Layout für Ihre Visual Studio-Fenster wechseln. Sobald Sie fertig sind, Strg-Alt-2, um zu Ihrem Zwei-Monitor-Layout zu wechseln und alle Ihre Fenster zurück zu bekommen. Genial!
http://www.invisible-city.com/sharon/2008/06/workstation-hack-visual-studio-on-2.html
Ich könnte diese Frage, ohne erwähnen this one nicht gehen lassen. Es hat sogar ein Video, um zu zeigen, wie man es installiert und benutzt. Mit diesem Makro können Sie einfach die verschachtelten Dateien im Solution Explorer (wie resources.resx) erstellen.
Edit: Aktualisiert den Link
Link unterbrochen, Update vielleicht? – Maslow
Danke maslow, ich habe den Link aktualisiert –
ich sehr oft die folgenden weniger bekannte Abkürzungen verwenden:
Zeigen Sie die Startseite, nachdem Sie eine Lösung schließen (aber halten Visual Studio geöffnet)
diesen Code Setzen Sie in Ihrem EnvironmentEvents Modul:
Private Sub SolutionEvents_AfterClosing() Handles SolutionEvents.AfterClosing
DTE.ExecuteCommand("View.StartPage")
End Sub
ausblenden die Startseite nach wie öffnen olution
Diesen Code in Ihren EnvironmentEvents Modul:
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
Diese beiden zusammen wird dazu führen, dass Startseite selbst verstecken, wenn Sie eine Lösung zu öffnen. Wenn Sie die Lösung schließen, wird die Startseite angezeigt.
Wer braucht wirklich die Startseite? – kizzx2
Startseite lame – Pacerier
VS 2010 hinzugefügt eine Option "Seite nach Projekt laden" auf der Startseite, so dass das Schließen Makro nicht mehr benötigt wird. Sie haben das und "Seite beim Start anzeigen", aber aus unbekannten Gründen, die mir unbekannt sind, gibt es keine Option "Seite nach Schließen der Lösung anzeigen", was das passende Gegenteil von "Seite nach Projekt laden" ist. Wer braucht die Startseite? Ich verwende es, um Letzte Projekte zu fixieren. AFAIK, es ist der einzige Ort, an dem Sie aktuelle Projekte/Lösungen (2010) festhalten können. Sie können die Elemente im Menü Datei -> Letzte Projekte und Lösungen nicht anheften, so dass sie für eine langfristige Verwendung nicht zuverlässig sind. – minnow
umreißt: Einsturz zu Definitionen aber erweitern Regionen
Sind Sie in einem dieser Läden arbeiten, um alles auf Regionen besteht, so dass, wenn Sie Definitionen kollabieren, können Sie keinen Code sehen ?
Was Sie wirklich brauchen, ist ein Zusammenbruch zu Definitionen-but-expand-Regionen Makro, wie diese:
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
dieses in einem normalen Makromodul, Zuweisen zu einem Hot-Key, und Ihr Code ist zurück.
(Außer ... wenn Sie mit einigen wirklich ruchlosen Personen arbeiten, die Regionen innerhalb Methoden setzen, wird dies leider diese Methoden erweitern. Wenn jemand einen Weg weiß, um dies zu schreiben, zögern Sie nicht zu bearbeiten.)
anzeigen Build Dauer im Ausgabefenster
dieser Code in Ihrem EnvironmentEvents Modul. Dadurch wird die Dauer für jede Aktion einer Lösung (Build, Rebuild, Clean, Deploy) direkt in das Erstellungsfenster geschrieben.
Sie können die IsBuild-Funktion ändern, um die Aktionen anzugeben, für die diese Informationen angezeigt werden sollen.
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
Ich habe etwas ähnliches, aber ich frage mich, ob es einen Weg gibt, eine laufende Summe zu machen, die hartnäckig ist, so dass ich verfolgen kann, wie viel von meinem Leben ich kompiliere. – Dolphin
Sicher, nehmen Sie einfach die Zeitspanne und speichern Sie sie in einer Datenbank. Soweit ich weiß, können Sie so ziemlich jeden Code in einem Makro ausführen. Schreiben Sie einfach Code, um den neuesten TimeSpan zu speichern, und rufen Sie dann den Gesamtwert ab und zeigen Sie diesen stattdessen an. –
Wenig spät auf die Party, aber wollte Ihnen für diesen einen danken, wie es genau das ist, was ich suchte. Nebenbei bemerkt: Sie können 'ow.OutputWindowPanes.Item (" Build "). OutputString (Nachricht)' anstelle von 'For Each' verwenden. – Chrono
Collapse alle Knoten der Panel-Lösung, sehr nützlich, vor allem für große Projekte:
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
keinen Makro auf seinem eigenen, aber nützlich:
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
I‘ Ich arbeite derzeit an zwei verschiedenen Projekten mit unterschiedlichen Codierungsstandards, einer, der Registerkarten für Zeilenanfänge und ein anderes, das Leerzeichen verwendet, verwendet. Dieses Makro schaltet zwischen dem Standard um, der verwendet wird, abhängig davon, welche Umgebung gerade aktiv ist:
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
Ich kann dieser Frage nicht mehr zustimmen. Es ist äußerst konstruktiv und eine gute Frage. –
Ich stimme zu. Dies war ein nützliches Thema und enthält die Antwort, die ich suchte. – SturmUndDrang
In VS 2012 wurde der Makroeditor entfernt. Das sind die schlechten Nachrichten. Die gute Nachricht ist, dass Sie im Grunde denselben Code in der Sprache Ihrer Wahl verwenden können, indem Sie ein Add-In erstellen. Erstellen Sie ein Visual Studio-Add-In-Projekt, das den von Ihnen benötigten Standardcode enthält. Wenn Sie testen, startet VS 2012 eine separate Instanz von VS 2012 mit installiertem Add-In. Wenn Sie bereit sind, die Bereitstellung durchzuführen, gehen Sie zu "Eigene Dateien \ Visual Studio 2012 \ Addins". Dort legen Sie für Ihr Projekt 'whatever' die Datei' wash.dll' für Ihr Add-In sowie die Datei 'wasd.AddIn' aus dem Hauptverzeichnis des Projekts. –