web-dev-qa-db-fra.com

Superbes macros Visual Studio

Pour une petite discussion avec la communauté, quelles sont les macros Visual Studio essentielles que vous utilisez?

Je viens de commencer à les connaître et je veux savoir ce dont certains d'entre vous ne peuvent pas se passer.

67
BBetances

J'ai utilisé beaucoup de macros dans VS 2002/2003. Un exemple serait la création de régions - j'aime toujours que mes classes soient réparties dans les régions suivantes - "Membres privés", "Propriétés publiques", "Méthodes publiques" et "Méthodes privées". J'ai donc une macro mappée sur une touche de raccourci qui crée ces régions dans n'importe quel nouveau fichier de classe.

La prise en charge de la refactorisation dans VS 2005/2008 (et la possibilité d'ajouter des extraits de code communs) ainsi que l'utilisation de compléments comme DXCore et SlickEdit me permettent de travailler sans avoir à créer trop de macros.

0
Cerebrus

J'ajoute des boutons sur la barre d'outils pour les 3 macros suivantes. Chacun prendra le texte actuellement sélectionné dans n'importe quel fichier et le recherchera sur Google (ou MSDN-it ou orthographiez-le). Créez une icône astucieuse pour la barre d'outils pour des points de style supplémentaires.

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
31
Aardvark

Afficher la durée de construction dans la fenêtre de sortie

Mettez ce code dans votre module EnvironmentEvents. Cela écrira la durée directement dans la fenêtre de construction pour toute action sur une solution (construire, reconstruire, nettoyer, déployer).

Vous pouvez modifier la fonction IsBuild pour spécifier les actions pour lesquelles vous souhaitez voir ces informations.

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
25
Ryan Lundy

afficher la page de démarrage après avoir fermé une solution (mais garder Visual Studio ouvert)

Mettez ce code dans votre module EnvironmentEvents:

Private Sub SolutionEvents_AfterClosing() Handles SolutionEvents.AfterClosing
    DTE.ExecuteCommand("View.StartPage")
End Sub


Masquer la page de démarrage après avoir ouvert une solution

Mettez ce code dans votre module 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


Ces deux éléments entraîneront le masquage de votre page de démarrage lorsque vous ouvrirez une solution. Lorsque vous fermez la solution, la page de démarrage revient.

14
Ryan Lundy

J'utilise très souvent les raccourcis moins connus suivants:

  • Ctrl + Entrée : Insérez une ligne vierge au-dessus de la ligne actuelle (et placez-y le curseur)
  • Ctrl + Maj + Entrée : insérez une ligne vierge sous la ligne actuelle (et placez-y le curseur)
  • Ctrl + Maj + V : Fait défiler le anneau du presse-papiers
13
Sam Harwell

Décrire: réduire les définitions mais développer les régions

Travaillez-vous dans l'une de ces boutiques qui insiste sur les régions autour de tout , de sorte que lorsque vous vous réduisez aux définitions, vous ne pouvez pas voir de code?

Ce dont vous avez vraiment besoin, c'est d'une macro de réduction en définitions mais en expansion de régions, comme celle-ci:

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

Mettez-le dans un module macro ordinaire, assignez-le à une touche de raccourci et votre code est de retour.

(Sauf ... si vous travaillez avec des individus vraiment néfastes qui mettent des régions à l'intérieur des méthodes , cela étendra malheureusement ces méthodes. Si quelqu'un sait comment écrivez ceci pour éviter cela, n'hésitez pas à le modifier.)

9
Ryan Lundy

Insérez le GUID, idéal pour le travail WiX, ajoutez au menu sous forme de bouton ou de raccourci clavier.

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

Organisez les utilisations pour tous les fichiers .cs dans une solution - Auteur d'origine: 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
8
si618

Réduire tous les nœuds du panneau Solution, très utile surtout pour les gros projets:

    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
5
Olivier Payen

Je travaille avec deux moniteurs, et je trouve la macro de changement de disposition de Sharon (d'une configuration à 1 moniteur à une configuration à 2 moniteurs) totalement inestimable. Lorsque vous devez référencer une page Web ou un autre programme tout en tapant un peu de code, Ctrl-Alt-1 pour basculer vers une disposition à un moniteur pour vos fenêtres Visual Studio. Une fois que vous avez terminé, Ctrl-Alt-2 pour passer à la disposition de vos deux moniteurs et récupérer toutes vos fenêtres. Impressionnant!

http://www.invisible-city.com/sharon/2008/06/workstation-hack-visual-studio-on-2.html

4
womp

J'utilise les macros FormatToHtml de Jeff si je vais coller un exemple de code dans un article de blog ou un e-mail.

4
Glenn Lang

Pas une macro en soi, mais utile:

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
2
Benjol

Je travaille actuellement sur deux projets différents avec des normes de codage différentes, un qui utilise des tabulations pour les débuts de ligne et un autre qui utilise des espaces. Cette macro bascule entre la norme utilisée en fonction de l'environnement actuellement actif:

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
1
yanigisawa

J'ai mappé ctrl-shift-G à une macro qui génère un GUID au format de registre - ceci est utile pour éditer IDL

1
1800 INFORMATION

Je ne pouvais pas laisser passer cette question sans mentionner celle-ci . Il a même une vidéo pour montrer comment l'installer et l'utiliser. Cette macro vous permet simplement de créer les fichiers imbriqués dans l'explorateur de solutions (comme resources.resx).

Modifier: mise à jour du lien

0
Preet Sangha