Est-ce que quelqu'un peut publier une macro Visual Studio qui parcourt tous les fichiers source C# dans un projet et ajoute une bannière de fichier? Crédit supplémentaire si cela fonctionne pour n'importe quel type de fichier source (.cs, .xaml, etc).Besoin d'une macro Visual Studio pour ajouter une bannière à tous les fichiers C#
Répondre
Ici, vous allez, je donne un exemple pour .cs et .vb mais ne devrait pas être difficile pour vous adapter à vos autres besoins type de fichier: Edité pour ajouter récursive tête à sous -folders
Sub IterateFiles()
Dim solution As Solution = DTE.Solution
For Each prj As Project In solution.Projects
IterateProjectFiles(prj.ProjectItems)
Next
End Sub
Private Sub IterateProjectFiles(ByVal prjItms As ProjectItems)
For Each file As ProjectItem In prjItms
If file.SubProject IsNot Nothing Then
AddHeaderToItem(file)
IterateProjectFiles(file.ProjectItems)
ElseIf file.ProjectItems IsNot Nothing AndAlso file.ProjectItems.Count > 0 Then
AddHeaderToItem(file)
IterateProjectFiles(file.ProjectItems)
Else
AddHeaderToItem(file)
End If
Next
End Sub
Private Sub AddHeaderToItem(ByVal file As ProjectItem)
DTE.ExecuteCommand("View.SolutionExplorer")
If file.Name.EndsWith(".cs") OrElse file.Name.EndsWith(".vb") Then
file.Open()
file.Document.Activate()
AddHeader()
file.Document.Save()
file.Document.Close()
End If
End Sub
Private Sub AddHeader()
Dim cmtHeader As String = "{0} First Line"
Dim cmtCopyright As String = "{0} Copyright 2008"
Dim cmtFooter As String = "{0} Footer Line"
Dim cmt As String
Select Case DTE.ActiveDocument.Language
Case "CSharp"
cmt = "//"
Case "Basic"
cmt = "'"
End Select
DTE.UndoContext.Open("Header Comment")
Dim ts As TextSelection = CType(DTE.ActiveDocument.Selection, TextSelection)
ts.StartOfDocument()
ts.Text = String.Format(cmtHeader, cmt)
ts.NewLine()
ts.Text = String.Format(cmtCopyright, cmt)
ts.NewLine()
ts.Text = String.Format(cmtFooter, cmt)
ts.NewLine()
DTE.UndoContext.Close()
End Sub
Merci, je vais voter pour celui-ci au lieu de celui qui a le lien vers le blog, car cela montre comment énumérer les projets. – DSO
À quel point cela fonctionne-t-il pour les fichiers qui ont des concepteurs, comme WinForms? –
Devrait l'ajouter à n'importe quel fichier CS ou VB dans la solution. Ce qui inclurait le fichier du concepteur - cependant, comme avec n'importe quel fichier 'généré', le fichier pourrait changer et votre commentaire pourrait ne plus être là. –
Wow - bonne réponse. Dommage que l'OP ne semble pas grok Google. –
Merci pour le lien. Onorio, j'ai essayé google mais j'ai utilisé le mot "bannière" au lieu de "en-tête" ... qui renvoie des résultats totalement différents. Je ne sais pas pourquoi, je les ai toujours appelés des bannières. Bien sûr, maintenant, à cause de ce post, l'utilisation du mot "bannière" renvoie ce même post! – DSO
Voici le jist de celui-ci. Non, je n'ai pas débogué cela, c'est un exercice pour le lecteur. Et, ceci est fait du haut de ma tête. (Excepté le commenter de fichier ... C'est une vraie macro que j'utilise).
function CommentAllFiles
option explicit
Dim ActiveProjectFullName
Dim dte80 As EnvDTE80.Solution2
ActiveProjectFullName = dte80.Projects.Item(0).FullName
If ActiveProjectFullName = "" Then
MsgBox("No project loaded!")
Exit Sub
End If
Err.Number = 0
doc.Open(ActiveProjectFullName, "Text", True)
If Err.Number <> 0 Then
MsgBox("Open " + ActiveProjectFullName + " failed: " & Hex(Err.Number))
Exit Sub
End If
ActiveDocument.Goto(1, 1, vsMovementOptions.vsMovementOptionsMove)
' Build search string
Dim SearchString
Dim vsFindOptionsValue As Integer
SearchString = "^SOURCE=.*" + dn + "$"
while ActiveDocument.Selection.FindText(SearchString, vsFindOptions.vsFindOptionsFromStart + vsFindOptions.vsFindOptionsRegularExpression)
Dim TheFile
TheFile = ActiveDocument.Selection.Text
TheFile = Mid(TheFile, 8)
doc.Open(TheFile)
wend
ActiveDocument.Close()
end function
éprouvé et vrai "Flower Box" aspic
Function IsClassDef()
Dim ColNum
Dim LineNum
Dim sText
sText = ActiveDocument.Selection.ToString()
If sText = "" Then
'ActiveDocument.Selection.WordRight(dsExtend)
'sText = ActiveDocument.Selection
'sText = ucase(trim(sText))
End If
If (sText = "CLASS") Then
IsClassDef = True
Else
IsClassDef = False
End If
End Function
Sub AddCommentBlock()
'DESCRIPTION: Add Commecnt block to header, CPP files and Class Defs
AddCPPFileDesc()
End Sub
Sub AddCPPFileDesc()
'DESCRIPTION: Add File desc block to the top of a CPP file
Dim selection As EnvDTE.TextSelection
ActiveDocument.Selection.StartOfLine()
Dim editPoint As EnvDTE.EditPoint
selection = DTE.ActiveDocument.Selection()
editPoint = selection.TopPoint.CreateEditPoint()
Dim bOk, sExt, IsCpp, IsHdr, sHeader, IsCSharp
bOk = True
IsCpp = False
IsCSharp = False
If ActiveDocument.Selection.CurrentLine > 10 Then
If MsgBox("You are not at the top of the file. Are you sure you want to continue?", vbYesNo + vbDefaultButton2) = vbNo Then
bOk = False
End If
End If
If (bOk) Then
sExt = ucase(right(ActiveDocument.Name, 4))
IsCpp = sExt = ".CPP"
IsHdr = Right(sExt, 2) = ".H"
IsCSharp = sExt = ".CS"
If (IsCpp) Then
sHeader = left(ActiveDocument.Name, len(ActiveDocument.Name) - 3) + "h"
FileDescTopBlock(1)
editPoint.Insert("#include " + Chr(34) + "StdAfx.h" + Chr(34) + vbLf)
editPoint.Insert("#include " + Chr(34) + sHeader + Chr(34) + vbLf)
ElseIf (IsCSharp) Then
FileDescTopBlock(1)
Else
If IsHdr Then
'If IsCLassDef() Then
'AddClassDef()
'Else
AddHeaderFileDesc()
'End If
Else
FileDescTopBlock(1)
End If
End If
End If
End Sub
Sub AddHeaderFileDesc()
FileDescTopBlock(0)
Dim selection As EnvDTE.TextSelection
ActiveDocument.Selection.StartOfLine()
Dim editPoint As EnvDTE.EditPoint
selection = DTE.ActiveDocument.Selection()
editPoint = selection.TopPoint.CreateEditPoint()
editPoint.Insert("#pragma once" + vbLf)
End Sub
Sub FileDescTopBlock(ByVal HasRevHistory)
'DESCRIPTION: Add File desc block to the top of a CPP file
Dim selection As EnvDTE.TextSelection
ActiveDocument.Selection.StartOfLine()
ActiveDocument.Selection.EndOfLine()
Dim sComment
sComment = ActiveDocument.Selection.ToString()
If Left(sComment, 2) = "//" Then
ActiveDocument.Selection.Delete()
sComment = LTrim(Mid(sComment, 3))
Else
sComment = ""
End If
Dim sLineBreak
Dim sFileName
Dim sBlock
sLineBreak = "////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////"
sFileName = ActiveDocument.Name
ActiveDocument.Selection.StartOfDocument()
sBlock = sLineBreak & vbLf & _
"// File : " & sFileName & vbLf & _
"// Author : Larry Frieson" & vbLf & _
"// Desc : " & sComment & vbLf & _
"// Date : " & CStr(Now.Date()) & vbLf & _
"//" & vbLf & _
"// Copyright © 20" + Right(CStr(Now.Year.ToString()), 2) + " MLinks Technologies. All rights reserved" + vbLf
If (HasRevHistory > 0) Then
sBlock = sBlock & _
"//" & vbLf & _
"// Revision History: " & vbLf & _
"// " & CStr(Now) & " created." & vbLf & _
"// " & vbLf
End If
sBlock = sBlock + sLineBreak + vbLf
Dim editPoint As EnvDTE.EditPoint
selection = DTE.ActiveDocument.Selection()
editPoint = selection.TopPoint.CreateEditPoint()
editPoint.Insert(sBlock)
End Sub
Hope this helps, ou tout au moins vous donne quelques idées. Encore une fois, je n'ai pas testé/déboguer le "fichier source looper", je suppose que vous pouvez gérer cela.
Larry
- 1. Fermez tous les fichiers dans Visual Studio à la sortie
- 2. Macro Visual Studio 2008 question
- 3. Visual Studio Macro à coller semblable à String.Format
- 4. Visual Studio Ajouter pour ajouter un suivi
- 5. Visual C++ studio, recompiler uniquement les fichiers modifiés
- 6. Utilisation System.Windows.Forms dans un Visual Studio Macro
- 7. Où est une bonne macro Visual Studio pour itérer et liste tous les menus (VS2008 si pos.)?
- 8. Ajouter une bibliothèque au projet Visual Studio 2008 C++
- 9. Insérer un extrait d'une macro Visual Studio
- 10. Versions - comment ajouter tous les nouveaux fichiers
- 11. Vérification des commentaires de code dans les fichiers Visual Studio
- 12. Projet d'installation de Visual Studio avec tous les fichiers d'un dossier
- 13. Ajouter tous les fichiers non versionnés à SVN
- 14. Visual Studio: Impression de tous les fichiers source dans une solution?
- 15. Ajouter une balise personnalisée à la validation Visual Studio
- 16. C++ - Visual Studio CRT
- 17. Quelqu'un at-il une liste de tous les noms pragma Visual Studio C#?
- 18. Quels sont les fichiers requis pour un projet Visual Studio?
- 19. Fichiers partagés entre projets dans Visual Studio
- 20. Besoin d'aide pour ajouter un wchar_t à un autre! C++
- 21. Dans Visual Studio, qu'est-ce qu'un moyen rapide de supprimer tous les fichiers d'exclusion d'un projet?
- 22. Comment ajouter des modèles WCF à Visual Studio Express?
- 23. Comment ajouter CRRedist2008_x86.msi à Visual Studio Deployment Project?
- 24. La meilleure façon d'éliminer tous les fichiers intermédiaires des dossiers de projet Visual Studio?
- 25. Visual Studio 2008 (C++) répertoires supplémentaires pour le débogage?
- 26. Puis-je créer une macro Visual Studio pour lancer un projet spécifique dans le débogueur?
- 27. N'importe lesquels ont un raccourci/macro Visual Studio pour basculer entre les exceptions gérées/non gérées?
- 28. Comment désactiver la bulle "tip" de la macro Visual Studio?
- 29. Comment puis-je écrire une macro Visual Studio pour effectuer un refactoring de classe d'extraction?
- 30. Afficher tous les fichiers par défaut
VS 2013 a une belle add-in de (http://licensemanager.codeplex.com/) [rubicon IT] qui vous permet d'ajouter, de supprimer et mettre à jour un en-tête à chaque fichier le type d'extension déclaré dans votre fichier de licence. Installez directement en allant dans Outils -> "Extensions et mises à jour" -> "En ligne" -> recherchez "en-têtes" et trouvez le résultat "Gestionnaire d'en-têtes de licence". Maintenant, faites un clic droit sur votre dossier de projet et utilisez le nouveau menu "en-têtes de licence". –