Czy ktoś może opublikować makro Visual Studio, które przechodzi przez wszystkie pliki źródłowe C# w projekcie i dodaje baner plików? Dodatkowy kredyt, jeśli działa dla dowolnego typu pliku źródłowego (.cs, .xaml, itp.).Potrzebujesz makra Visual Studio do dodania banera do wszystkich plików C#
Odpowiedz
Proszę, ja stanowić przykład dla .cs i .Vb ale nie powinno być trudne, aby dostosować go do innego typu pliku potrzebuje: edytowane rekursywnie dodać nagłówek do sub -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
Dziękuję, będę głosował na ten jeden zamiast tego, który ma link do bloga, ponieważ pokazuje, jak wyliczyć projekty. – DSO
Jak dobrze to działa w przypadku plików, które mają projektantów, takich jak WinForms? –
Należy dodać go do dowolnego pliku CS lub VB w roztworze. Który zawiera plik projektanta - jednak tak jak w przypadku każdego "wygenerowanego" pliku, plik może się zmienić, a komentarz może już nie występować. –
Wow - świetna odpowiedź. Szkoda, że PO nie wydaje się błądzić Google. –
Dzięki za link. Onorio, wypróbowałem google, ale użyłem słowa "banner" zamiast "header" ... które zwraca zupełnie inne wyniki. Nie wiem dlaczego, zawsze nazywałam je banerami. Oczywiście teraz z powodu tego postu, użycie słowa "banner" zwraca ten sam wpis! – DSO
Oto jist niego. Nie, nie debugowałem tego, to jest ćwiczenie dla czytelnika. I robi się to z mojej głowy. (Z wyjątkiem komentera plików ... To jest prawdziwe Makro, którego używam).
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
wypróbowane i prawdziwe "Flower Box" żmija:
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
Nadzieja to pomaga, a przynajmniej daje jakieś pomysły. Ponownie, nie testowałem/debugowałem "looper pliku źródłowego", sądzę, że sobie z tym poradzisz.
Larry
- 1. Jak dodać makra do projektu visual studio?
- 2. Możliwe implikacje dodania plików * .sdf do .gitignore
- 3. Łącze do wszystkich zmiennych Visual Studio $
- 4. Używanie CMake do generowania plików projektów Visual Studio C++
- 5. C# do pisania makr w Visual Studio?
- 6. C#: Pobieranie wszystkich plików obrazów do folderu
- 7. auto formatowanie wszystkich plików w rozwiązaniu w Visual Studio 2010
- 8. Visual Studio: nie można znaleźć "pliku zasobów" na liście elementów do dodania do projektu
- 9. Visual Studio: Drukowanie wszystkich plików źródłowych w rozwiązaniu?
- 10. Visual Studio Build Makra zdarzeń - Nazwa konfiguracji rozwiązania
- 11. Skrót do zwinięcia wszystkich nagłówków/komentarzy dokumentacji w Visual Studio
- 12. Selektor plików programu Visual Studio
- 13. Jak uzyskać Visual Studio do rozpoznawania wielu plików zasobów projektu
- 14. Dodawanie istniejących plików do różnych projektów Visual Studio 2010
- 15. Jak ustawić Visual Studio do automatycznego publikowania plików PDF?
- 16. Testowanie jednostek Visual Studio - jak uzyskać dostęp do plików zewnętrznych?
- 17. Wymuś użycie CMake do użycia kompilatora C++ dla plików C z Visual Studio
- 18. Makra dla Budowanie poleceń i właściwości w Visual Studio 11
- 19. Visual Studio: krok do złożenia
- 20. Skok do skrótu Visual Studio
- 21. Tworzenie wtyczki do Visual Studio
- 22. Projekt Visual Studio do MonoDevelop
- 23. Upgrade Visual Studio 2013 rozwiązań do Visual Studio 2015
- 24. Wtyczka Visual Studio 2010 - Dodanie menu kontekstowego do okna edytora
- 25. Visual Studio - Czy istnieje prosty sposób dodania "Close Solution" do kliknięcia w Eksploratorze rozwiązań
- 26. najlepszy sposób dodania jquery do "pustego" projektu internetowego w visual studio?
- 27. Łączenie wielu plików konfiguracyjnych w Visual Studio
- 28. Definicja przejścia do programu Visual Studio - interfejsy
- 29. zmienna Makra/Środowisko w .sln i plików .vcproj dla Visual Studio
- 30. Debugowanie plików zrzutu w programie Visual Studio
VS 2013 ma ładny dodatek z [Rubicon IT] (http://licensemanager.codeplex.com/), która pozwala na dodawanie, usuwanie i aktualizowanie nagłówek do każdego pliku z rodzaj rozszerzenia zadeklarowany w pliku licencji. Zainstaluj bezpośrednio, przechodząc do Narzędzia -> "Rozszerzenia i aktualizacje" -> "Online" -> wyszukaj "nagłówki" i znajdź wynik "Menedżer nagłówka licencji". Teraz kliknij prawym przyciskiem myszy folder projektu i użyj nowego menu nagłówków licencji. –