2 Stimmen

Das Hinzufügen des gleichen Kommentars zu jeder Code-Datei in einer Visual Studio-Lösung

Hintergrund: Wir verwenden VS 2008 und befinden uns im Prozess des Upgrades von TFS 2005 auf 2008.

Wir haben eine Lösung, die mehrere Projekte enthält und insgesamt Hunderte von Code-Dateien hat. Wir möchten allen diesen Dateien denselben Text als Kommentar hinzufügen (eine Urheberrechtsnachricht). Weiß jemand, ob es einen schnellen/einfachen/effizienten Weg gibt, dies zu tun? Gibt es auch eine Möglichkeit, dies über TFS zu tun, damit wir nicht jede Datei checken müssen?

Ich habe einige Codes auf CodeProject gefunden, die ein Makro erstellen, das dies tut, aber Sie müssen jede Datei einzeln öffnen und dann das Makro für jede ausführen, was wir gerne vermeiden würden.

Danke.

1voto

NotMe Punkte 86089

Es sollte für euch Jungs trivial sein, ein einfaches Programm zu schreiben, das durch alle Verzeichnisse und alle Code-Dateien (vorausgesetzt *.cs oder ähnliches) iteriert und Text am Anfang hinzufügt.

Es sollte weniger als 20 Minuten dauern, um das zu erstellen, zu testen und auszuführen.

Was TFS betrifft, führen Sie einfach einen Checkout-Befehl von der Spitze des Baums aus. Es wird jede Datei im Quellcode auschecken. Wenn Sie fertig sind, können Sie auch von oben auschecken.

Angenommen, es handelt sich um C#, schauen Sie sich System.IO.Directory.GetDirectories() an...

1voto

Adam Rosenfield Punkte 373807

Wenn Sie Cygwin installiert haben, können Sie das folgende Bash-Skript verwenden:

# Alle .cpp- und .h-Dateien im Verzeichnisbaum bei $PROJECTROOT verarbeiten
# Um andere Dateitypen hinzuzufügen, fügen Sie weitere "-o -name \*.ext" Klauseln hinzu.
# $COPYRIGHTFILE ist die Datei, die Ihre Urheberrechtsmeldung enthält
COPYRIGHTLENGTH=$(wc -l $COPYRIGHTFILE)
for file in $(find $PROJECTROOT -name \*.cpp -o -name \*.h); do
    if diff <(head -n $COPYRIGHTLENGTH $file) $COPYRIGHTFILE; then
        (cat $COPYRIGHTFILE; cat $file) > /tmp/file
        mv /tmp/file $file
    fi
done

Dies findet jede .cpp- oder .h-Datei im Verzeichnisbaum $PROJECTROOT, vergleicht den Anfang mit der Urheberrechtsmeldung und fügt, wenn sie sich unterscheiden, das Urheberrecht über eine temporäre Datei der Datei voran.

HAFTUNGSAUSSCHLUSS: Nicht getestet, bitte zuerst testen und auf eigenes Risiko verwenden.

1voto

RexCardan Punkte 358

Ich habe Code veröffentlicht, der genau das tut, was du in 20 Zeilen zu erreichen versuchst.

Ein Verweis auf diesen Code ist unten aufgeführt:

static void Main(string[] args)
{
    string path = "C:\\...TopLevelFolder";
    string copyright = "//Copyright © 2011 Rex Cardan, Ph.D";
    string[] files = Directory.GetFiles(path, "*.cs", SearchOption.AllDirectories);
    foreach (string file in files)
    {
        if (file.Split('\\')[file.Split('\\').Length-1]!= "AssemblyInfo.cs")
        {
            using (StreamWriter sw = File.AppendText(file))
            {
                sw.WriteLine("\r\n");
                sw.WriteLine(copyright);
                //Normalize Line Endings
                sw.WriteLine("\r\n");
            }
        }
    }
}

0voto

Jay Bazuzi Punkte 43111

 

Gibt es einen Weg, dies über TFS zu tun, damit wir nicht jede Datei auschecken und wieder einchecken müssen?

Es ist eine gute Idee, dass diese Änderung Teil der Änderungshistorie der Dateien ist. Also möchten Sie wirklich alle Dateien auschecken und wieder einchecken.

Kevin Pilch-Bissons Blog-Beitrag "Formatieren aller C#-Dateien in einer Lösung" ist eine gute Ressource. Sie können diesen Algorithmus ändern, um die Bearbeitungen vorzunehmen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X