Quelltext im Visual Studio automatisch formatieren

Das Visual Studio formatiert den Quellcode automatisch nach den eingestellten Richtlinien. Wenn man nun aber die Richtlinien ändert, steht man vor dem Problem, das der Quelltext noch nach den alten Richtlinien formatiert ist.

Die Formatierungseinstellungen im Visual Studio

Die Formatierungseinstellungen im Visual Studio

Leider gibt es keine direkte Option im Visual Studio um den bestehenden Quelltext am Stück neu zu formatieren. Allerdings kommt man mit einem kleinen Makro (abgeleitet vom VS Formater Macro) an dieser Stelle weiter. Dazu wird im Visual Studio die Package Manager Console (zu finden unter Tools -> NuGet Package Manager -> Package Manager Console) geöffnet und dort folgendes eingegeben:

function f($projectItems) { $projectItems | ? { $_.Name -ne $null -and $_.Name.EndsWith( ".cs" ) -and -not $_.Name.EndsWith( ".Designer.cs" ) } | % { $win = $_.Open('{7651A701-06E5-11D1-8EBD-00A0C90F26EA}') ; $win.Activate() ; $DTE.ExecuteCommand('Edit.FormatDocument') } ; if ($projectItems) { $projectItems | % { f($_.projectItems) } } }
 
$dte.Solution.Projects | % { f($_.ProjectItems) }

Das Visual Studio öffnet nun alle *.cs Dateien in der geöffneten Solution und formatiert die Quelltexte neu. Dieser Vorgang ist dabei relativ langsam und führt bei größeren Projekten dazu das das Visual Studio einfriert. Auf Stack Overflow gibt es eine elegantere Lösung:

function FormatItems($projectItems) {
    $projectItems |
    % {
        # Write-Host "    Examining item: $($_.Name)";

        if ($_.Name -and $_.Name.ToLower().EndsWith(".cs") `
            -and (-not $_.Name.ToLower().Contains(".designer."))) {

            $win = $_.Open('{7651A701-06E5-11D1-8EBD-00A0C90F26EA}');
            $win.Activate();

            $dte.ExecuteCommand('Edit.FormatDocument');

            if (!$_.Saved) {
                Write-Host "    Saving modified file: $($_.Name)";
                $dte.ExecuteCommand('File.SaveSelectedItems');
            }

            $dte.ExecuteCommand('Window.CloseDocumentWindow');
        }

        if ($_.ProjectItems -and ($_.ProjectItems.Count -gt 0)) {
            # Write-Host "    Opening sub-items of $($_.Name)";

            FormatItems($_.ProjectItems);
        }
    };
}

$dte.Solution.Projects | % {
    Write-Host "-- Project: $($_.Name)";

    FormatItems($_.ProjectItems)
}
;

Bei dieser Lösung wird jede Datei nach der Neuformatierung, gespeichert und wieder geschlossen. Leider wird auch diese Lösung von Datei zu Datei langsamer, so das sie für größere Projekte wiederrum unbrauchbar ist. Mit der Extension Format Document gibt es eine Lösung welche schnell genug ist, allerdings funktioniert diese nur unter Visual Studio 2010. Nach einigen Anpassungen habe ich eine Version gebaut, welche auch unter Visual Studio 2012 und 2013 läuft. Das Problem an dieser Variante ist, das Dateien in Ordnern nur berücksichtigt werden wenn der Ordner im Solution Explorer geöffnet ist. Alles in allem ist keine der vorgestellten Lösungen wirklich optimal, allerdings kann man viele Fälle mit den vorgestellten Lösungen lösen.

Quellcode und WordPress

Auf der Suche nach einer schönen Methode um Quellcode unter WordPress zu formatieren bin ich über die Seite http://www.niljuha.de/quellcode-boxen-in-wordpress/ gestolpert. Dort wird das über die Formatierung mittels Monospace gelöst. Dazu muss man nur seine style.css entsprechend erweitern bzw. anpassen. In meinem Fall sieht das ganze dann so aus:

pre {
 background: #6C7A94;
 border: 1px solid #333;
 color: #fff;
 font: 12px "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace;
 overflow: auto;
 padding: 10px;
 -moz-border-radius: 3px;
 border-radius: 3px;
 margin-bottom: 14px;
}

pre * {
 font: 12px "Consolas", "Bitstream Vera Sans Mono", "Courier New", Courier, monospace;
}

Diese Methode hat den Vorteil das man keine weiteren Plugins benötigt und das ganze auch noch sehr ansprechend aussieht :)

Festplatte mit FAT32 formatieren

Ich wollte gestern eine externe Festplatte mit einer FAT32 formatieren. Aus Gründen welche wohl nur Microsoft kennt geht dies aber nur bei Festplatten bis 32 GB. Wahrscheinlich wollte Microsoft die Verbreitung seines NTFS Dateisystemes ein bisschen ankurbeln. Dank der c’t gibt es eine einfache Lösung auch größere Festplatten mit einer FAT32 zu formatieren.

Dazu benötigen wir das Tool h2format welches unter ftp://ftp.heise.de/pub/ct/ctsi/h2format.zip heruntergeladen werden kann. H2format formatiert aus Sicherheitsgründen nur unformatierte Partitionen (solche in denen die letzten Bytes des Bootsektors nicht 55 AA lauten). Solch eine Partion ann man in der Datenträgerverwaltung einfach anlegen in dem man während des Prozess des Anlegens „Partion nicht formatieren“ wählt. Danach kann man mittels

H2format
z.B. H2format X:

die Festplatte mit FAT32 formatieren.