Archiv der Kategorie: Visual Studio & .NET

ProgressBar für die Console

Für ein kleines Projekt brauchte ich einen Fortschrittsbalken für eine Kommandozeilen-Applikation. Ich war erstaunt, wie einfach das funktionierte und möchte meine Erfahrungen hier teilen.

Hier schon mal ein Blick auf das Endergebnis:

image

Zuerst einmal müssen die Begrenzungen des Fortschrittsbalken gezeichnet werden.

Um den Cursor zu positionieren, kann auf die statischen Eigenschaften CursorTop und CursorLeft der Console zurückgegriffen werden:

CursorTopLeft

Hier der Code zum Erstellen der Begrenzungen des Fortschrittsbalkens:

// Create boundaries for progress bar
Console.CursorTop = topOffset;
Console.CursorLeft = leftOffset;
Console.Write("[");
Console.CursorLeft = length;
Console.Write("]");

Das sieht dann erstmal so aus:

image

 

Dann füllen wir die Begrenzungen mit dem aktuellen Fortschritt:

// Calculate size of one percent element
float progressElementSize = ((float)length – leftOffset – 2) / total;

// Create progress content
int position = 1;
Console.CursorLeft = position;
for (int i = leftOffset; i < progressElementSize * progress; i++)
{
    Console.BackgroundColor = progressColor;
    Console.CursorLeft = position++;
    Console.Write(" ");
}
Console.BackgroundColor = ConsoleColor.Black;

Und das sieht dann so aus:

image

Ganz wichtig: In der letzten Zeile wird die Farbe wieder auf schwarz gesetzt, da sonst die aktuelle Schriftfarbe auf die des Fortschritts gesetzt wird.

Abschließend will ich noch den aktuellen Fortschritt prozentual anzeigen:

// Write progress message
Console.CursorLeft = length + 2;
int result = progress * 100 / total;
Console.Write(customProgressMessage ?? (result + "%").PadLeft(4));

Das .PadLeft(4) habe ich angehängt, damit der String nicht springt, wenn von 9% auf 10% und von 99% auf 100% gesprungen wird.

Viel Spaß damit Smiley

Download: http://sdrv.ms/10HH7Pk

Drag&Drop: FileDrop aus eigener Applikation heraus

Möchte man per Drag&Drop Dateien aus dem Windows Explorer in die eigene Applikation hereinziehen, so ist das kein Problem:

  • Platzieren eines Controls, auf dem die Datei(en) per Drag&Drop gezogen werden sollen
  • Eigenschaft “AllowDrop” des Controls auf “True” setzen:

image

  • Registrieren auf die Events DragEnter und DragDrop:

image

  • Im EventHandler für DragEnter prüfen, ob es sich im Dateien und den Mauszeiger anpassen handelt:

if (e.Data.GetDataPresent("FileDrop"))
{
    e.Effect = DragDropEffects.Copy;
}

  • Im EventHandler für DragDrop die Datei auslesen (und in einer TextBox darstellen)

string[] files = e.Data.GetData("FileDrop") as string[];
if (files == null) return;

_txtContent.Text = File.ReadAllText(files[0]);

Das Resultat kann dann so aussehen:

image

Anders herum ist es jedoch etwas schwieriger: Wie kann ich Daten beispielsweise aus einer TextBox per Drag&Drop in eine Datei in den Windows Explorer droppen?

Dazu muss man sich eines kleinen Tricks behelfen: Man muss ein FileDrop initiieren und die zu droppenden Daten in eine temporäre Datei kopieren. Der Dateiname der temporären Datei ist dann auch der Dateiname des Drop Targets. Hier ist eine kleine Schritt-für-Schritt Anleitung:

  • Registrieren auf das MouseDown Event als Initiator für die Drag&Drop Aktion:

image

  • Anlegen einer temporären Datei mit dem Inhalten, die in die zu droppende Datei geschrieben werden sollen. Wichtig: Der Dateiname ist auch der Dateiname der dort erstellt wird, wo die Datei im Explorer gedropped wird:

// Create temporary file name
string tempFile = Path.Combine(Path.GetTempPath(), "LoremIpsum.txt");

  • Inhalt in die temporäre Datei schreiben

// Write content to drop into the temporary file
File.WriteAllText(tempFile, _txtContent.Text);

  • Temporäre Date in ein string-Array verpacken (wird benötigt, da FileDrop ein string array erwartet):

// Create string-array for FileDrop operations
string[] files = new[] { tempFile };

  • DataObject erstellen und mit dem Format der Daten (“FileDrop”) und den Daten instanziieren:

// Create DataObject for "FileDrop" and add string[] with temporary file
DataObject dataObject = new DataObject("FileDrop", files);

  • DragDrop initiieren und dataObject übergeben:

// Initiate DragDrop operation
DoDragDrop(dataObject, DragDropEffects.All);

GitHub Repository mit PlasticSCM verwalten

Durch Zufall bin ich heute auf der Seite von CodeIce gelandet und habe gesehen, dass deren SCM (Software Configuration Management) System namens “Plastic SCM” auf mit Git Repositories auf GitHub, CodePlex & Co umgehen kann.

Da ich selbst an OpenSource Projekten auf GitHub und CodeProject arbeite, wollte ich mir das System mal genauer anschauen. Eine Lizenz für bis zu 15 Benutzer ist zudem kostenlos – was habe ich also schon verlieren? Zwinkerndes Smiley

 

Nachdem ich mir einen ersten Workspace eingerichtet habe, wollte ich mein GitHub Repository importieren bzw. synchronisieren. Dazu habe ich zuerst meine GitHub Projektseite geöffnet: https://github.com/minibrain/VisualStudioSetupProjectToWixConverter

image

Anschließend öffnet man in Plastic SCM den Eintrag “Branches” unter “Main actions”:

image

Als nächstes wählt man den Branch aus und klickt mit der rechten Maustaste darauf. Im Kontextmenü wählt man nun “Replication” und “Sync with Git …”.

Anschließend gibt man den Pfad zum Repository und die Login-Daten ein:

image

Nach einem Klick auf “Sync” wird damit begonnen, die Branches aus dem Git Repository zu importieren:

image

Nach einer kurzen Weile ist der Import dann abgeschlossen:

image

Nun kann man die Features von Plastic SCM nett verwenden. Beispielsweise kann der “Branch Explorer” dazu verwendet werden, alle Branches visuell darzustellen. Bei meinem kleinen Spielprojekt ist das ganze etwas witzlos, weil ich noch nicht weggebrancht habe:

image

Alle Dateien aus dem Verzeichnis zeigt die “Items”-Ansicht:

image

Alle Commits lassen sich unter der Rubrik “Changesets” im Tab “Main actions” auflisten, durchsuchen und exportieren:

image

Die Integration in Visual Studio ist auch dabei:

image

Viele der gezeigten Features sind auch im Visual Studio verfügbar.

Alls in allem ein wirklich gutes Tool. Als nächstes werde ich versuchen, mein CodePlex Repository zu synchronisieren. Mal schauen, ob das auch so einfach geht Smiley

Hier kann man das Tool kostenlos herunterladen:
http://www.plasticscm.com/

Spezielle Seite zum neuen Feature “GitSync”:
http://www.plasticscm.com/gitsync/index.html

Blog-Eintrag zum Sync von GitHub Repos: http://codicesoftware.blogspot.com/2013/01/using-plastic-scm-to-sync-with-junior.html

Debugger zum Prozess-Start anhängen

Ab und zu kann es vorkommen, dass man sich bereits zu Prozess-Start mit einem Debugger anhängen möchte.

Dazu kann man sich eines einfachen Ticks bedienen. In der Registry registriert man einen Debugger an einem Prozessnamen.

Dazu öffnet man den Registrierungseditor (Start | Ausführen | regedit.exe):

image

Am Schlüssel
“HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Options”

trägt man dann einfach den Namen zu debuggenden Prozesses ein (hier: “MyDebuggee.exe”). Anschließend legt man eine neue Zeichenkette namens “debugger” an und weist ihr den Wert “vsjitdebugger.exe” zu.

Sobald man dann MyDebuggee.exe ausführt, erscheint der Just-In-Time Debugger Dialog von Visual Studio:

image

Jetzt muss man nur noch einen geeigneten Debugger auswählen und schon kann die Debugging-Session losgehen.

Hier noch der Link zum Original MSDN-Artikel: http://msdn.microsoft.com/en-us/library/a329t4ed(v=vs.100).aspx

Happy Debugging! Smiley

Clone Detective für Visual Studio

Heute bin ich auf ein cooles Add-On für Visual Studio aufmerksam geworden: Der Clone Detective für Visual Studio.

image 

Als Engine hinter Clone Detective kommt ConQAT von der TU München zum Einsatz: http://conqat.cs.tum.edu/index.php/Download

Nach der Installation gibt es in der “Ansicht” –> “Weitere Fenster” neue Einträge:

  • Clone Explorer
  • Clone Intersections
  • Clone Results

image

Zur Demonstration der einzelnen Fenster habe ich mir mal die Freiheit genommen, den Quellcode von iTextSharp auf Code-Duplikate zu untersuchen.

Clone Explorer

Die Clone Explorer startet die Analyse des Quellcodes und zeigt in einer Übersicht das Resultat:

image

Die Resultate lassen sich nun noch speziell gruppieren (hier: nach duplizierten Codezeilen):

image

Ebenfalls unterstützt wird das Importieren und Exportieren des Clone-Berichts. Selbstverständlich lassen sich die Such-Optionen noch konfigurieren:

image

Für meinen Geschmack war das allerdings schon gut genug 🙂

Code Intersections

Code Intersections stellen – wie der Name schon sagt- Überschneidungen im Code dar. Im folgenden Beispiel enthält die Datei BarcodeInter25.cs 15 Codeüberschneidungen mit der Dtei BarcodePostnet.cs:

image

Das Diagramm zeigt das Vorkommen der Überschneidung in der Datei. Mit der rechten Maustaste kann nun noch in den Ergebnissen gesucht werden und die betreffende Stelle über einen Doppelklick im Editor geöffnet werden.

Im Editor wird an der linken Seite eine lila Markierung dargestellt:

image

Diese zeigt die Stelle der Codeduplikate im Code an.

Clone Result

Das Fenster Clone Result zeigt das Code-Duplikat aus dem Editor nochmal an:

image

Fazit

Nicht jedes Duplikat ist auch wirklich ein Duplikat. Viele Fundstellen hingegen haben mir persönlich weitergeholfen, Redundanzen zu verringern und nochmals kritisch über meinen Code zu sehen.

Download

Das Programm kann auf CodePlex kostenlos (inkl. Source Code) heruntergeladen werden:

http://clonedetectivevs.codeplex.com/

Das Installer-Paket ist ca. 14MB groß.

Also Systemvoraussetzungen werden folgende genannt:

  • Visual Studio 2008 Standard oder besser
    (sorry, Visual Studio 2008 Express Editions unterstützen keine AddIns)
  • Java 1.5.0_01 oder neuer
    (ConQAT läuft unter Java)

Gratis Source-Code Analyse Tool für Visual Studio

Vor ein paar Wochen hat Microsoft das Project „Microsoft Source Analysis for C#“ veröffentlicht. Die Grundlage für die statische Code-Analyse ist dieses Mal der (C#)-Quellcode.

image

Wie man der eigens dafür eingerichteten Blog-Seite entnehmen kann, wurde das Tool zuvor intern eingesetzt, um den Code auf bestimmte Qualitätsmerkmale zu überprüfen.

Für meinen Geschmack sind ein paar Einstellungen wirklich unnötig bzw. nicht wirklich praxistauglich (zumindest für mich). Zum Glück kann man die zu prüfenden Kriterien über ein kleines Tool im Installationsverzeichnis konfigurieren:

image

Mit einem Doppelklick auf die Settings-Datei wird der Editor geöffnet. Dieser verfügt über 5 Tabs zur Konfiguration: Rules, Settings Files, Results Caching, Company Information und Hungarian. Diese sind nachfolgend der Übersicht halber

alle aufgeführt:

image

image

image

image

image

Im Visual Studio 2008 wird dann eine neue View „Source Analysis“ hinzugefügt, in der die jeweiligen Regelverletzungen aufgeführt werden:

image

Download: http://code.msdn.microsoft.com/sourceanalysis/Release/ProjectReleases.aspx?ReleaseId=1047

Blog-Seite:
http://blogs.msdn.com/sourceanalysis/

Dokumentation der einzelnen Rules:
http://blogs.msdn.com/sourceanalysis/pages/source-analysis-4-2-rules.aspx

F12 –> Programm.exe has triggered a breakpoint …

Beim Debuggen meiner Anwendung bin ich heute auf ein seltsames Phänomen gestoßen:

Ich habe die F12-Taste als Tastenkürzel einer Funktion zugeordnet. Wenn ich diese Funktion debuggen möchte, in dem ich auf F12 drücke, erscheint folgende Meldung:

image 

Nachdem ich länger dazu gegoogelt hab, war die Lösung näher als ich dachte: Es liegt daran, dass WindowsNT (wozu auch WindowsXP & Co. zählen) eine Funktion aufrufen, die ähnlich zu DebugBreak() ist.

Wen’s zu sehr nervt (wie mich zum Beispiel) der kann das Problem mithilfe eines Registry-Keys aus der Welt schaffen:

 

HKLMSOFTWAREMicrosoftWindows NTCurrentVersionAeDebugUserDebuggerHotKey

image

Mehr Informationen dazu findet man auf http://support.microsoft.com/kb/130667/en-us

Installation von Visual Studio 2008 Team Foundation Server unter Windows Server 2008

Am Dienstag (19.02.2008) und Mittwoch (20.02.2008) war ich zum Launch-Event von Visual Studio 2008 & Co. in Frankfurt. Dort habe ich mir bei der Vorträgen von Christian Binder und Marcus Alt Informationen zu Team Foundation Server geholt. Die Vorträge haben mich begeistert, da ich bisher ausschließlich mit Subversion und OnTime gearbeitet habe!

Als Mitbringsel von der Veranstaltung habe ich Visual Studio 2008 Standard, Windows Server 2008, sowie Visual Studio 2008 Team Foundation Server und MS SQL Server 2008 mit Heim genommen. Als ich die Verpackung aufmachte, musste ich feststellen, dass MS SQL Server 2008 noch nicht fertig ist und man mir stattdessen MS SQL Server 2005 und MS SQL Server 2008 CTP mitgegeben hat.

Voller Vorfreude habe ich dann auf meiner virtuellen Maschine Windows Server 2008 installiert. Das funktioniert echt prima! OK, dann TFS-CD rein ins Laufwerk und los geht’s! Danach folgte ich den Anweisungen des TFS Install Guide, den ich extra aus dem Internet aktualisiert herunter geladen hatte.

In dem Abschnitt „Prerequisite Installation“ stand „Before you deploy Team Foundation Server on a single server that is running Windows Server 2008, you must install IIS 7.0.“. Ok, also wieder in den Server Manager und folgende Rollen aktiviert:

  • ASP.NET
  • HTTP Redirections
  • IIS 6.0 Compatibility
  • Default options
  • Windows Authentication

Gut, danach steht in der Checklist, dass ich MS SQL Server 2005 auf Windows 2008 installieren soll. „Kein Problem“, dachte ich mir – TFS CD raus – SQL Server 2005-CD rein ins Laufwerk und Installation starten. Schon wieder eine Meldung:

Mit fehlte also zusätzlich noch Microsoft SQL Server 2005 Service Pack 2! Warum wird sowas dem Paket nicht beigelegt? Also bin ich den Hinweisen des Kompatibilitätsassistenten gefolgt und habe von der Microsoft Homepage das Service Pack 2 heruntergeladen (282MB) und nach meiner Installation von CD noch das Service Pack drauf gemacht.

Jetzt endlich sollte es losgehen! Wieder TFS-CD eingelegt und Setup gestartet. Plötzlich geht es nicht mehr weiter:

Ich habe keine Windows SharePoint Services Seite!! Woher bekomme ich diese nun? Ich erinnerte mich, dass beim Autostart der CD etwas von SharePoint Erweiterungen stand:

Also versuche ich es mal mit diesem Installer. Doch dieser bricht auch ab mit folgender Fehlermeldung:

Und abschließend stürzt das Setup dafür komplett ab:

Na toll! Woher bekomme ich nun Windows SharePoint Services 3.0? Warum ist das nicht mit auf der CD? Muss ich mir extra SharePoint anschaffen, nur um diesen TFS zu installieren? Das Handbuch half mir nicht wirklich weiter .. also musste google ran! Prompt wurde ich fündig: http://geekswithblogs.net/etiennetremblay/archive/2008/02/05/windows-2008–tfs-2008-it-works-but.aspx

Dort hatte jemand die gleichen Erfahrungen gemacht, wie ich. Allerdings bot er mir auch einen Link an, wo ich Windows SharePoint Services 3.0 (104MB) direkt von der Microsoft Homepage herunterladen konnte. Schon wenige Minuten später konnte die Installation los gehen:

[Update 01.03.2008]

Bei der Installation ist es wichtig, bei der „Erweiterten Installation“ den Servertyp von „Eigenständig“ auf „Web-Front-End Computer“ umzustellen:

Nach beendeter Installation kann die Konfiguration beginnen:

[Update 28.02.2008]

Ich führe nun die Kommandozeilen-Befehle aus, die im TFSInstall.chm stehen:

stsadm.exe -o extendvs -exclusivelyusentlm -url http://WSSServerName:Port -ownerlogin DomainUserName -owneremail „admin@localhost“ -sitetemplate sts -description „Description“

Das Ergebnis der Aktion sieht man hier:

„Die von Ihnen ausgewählte IIS-Website wird von SharePoint verwendet. Sie müssen einen anderen Port oder Hostnamen auswählen.“

Hä? Ich hab doch extra alles so befolgt, wie es in der Hilfe stand!?

Ich werde dann mal den Tipp von Peter (siehe Comments) befolgen und mein „Sharepoint 80“ löschen und dann die Kommandozeilen-Befehle neu ausführen. Leider hat das auch nix gebracht …

[Update 03.03.2008]

Nachdem mir Peter den entscheidenden Tipp gegeben hat, dass ich nicht denselben Port verwenden darf, wie meine Sharepoint-Administration (sorry 🙁 ), funktioniert alles wie es soll:

Nun schalte ich noch die Logins für den extra eingerichteten TFSSetup-User frei:

stsadm.exe -o siteowner -url http://tfs2k8:80 -secondarylogin TFSSetup

Für alle die es interessiert, wo dann die Seite mit stsadm.exe angelegt wird:

image

Dann kann’s ja mit der Installation losgehen …

[Update 04.03.2008]

Ich habe nun die Schritte bis zur Eingabe des Sharepoint Servers durchgeführt. Nun erhalte ich allerdings folgende Meldung:

image

Meine Einstellungen für Windows SharePoint Services sind die Folgenden:

image

Hier versuche ich es mal mit dem Tipp von Thomas und Peter (siehe Comments) und gebe statt http://TFS2k8:80/Sites –> http://TFS2k8:80/Websites an, da ich ebenfalls über die deutsche Version von Team Foundation Server verfüge:

image

Erst hat er rumgezickt .. aber es dann doch mit diesen Einstellungen übernommen!

Also ganz wichtig bei der deutschen Version von Team Foundation Server:

Statt http://SERVERNAME:PORT/Sites –> http://SERVERNAME:PORT/Websites

image

Und das ist die „Belohnung“ für die Mühen 🙂

image

Die Installation ist endlich abgeschlossen.

Zusammenfassung der wichtigsten Links soweit

Microsoft SQL Server 2005 Service Pack 2: http://www.microsoft.com/downloads/details.aspx?FamilyID=d07219b2-1e23-49c8-8f0c-63fa18f26d3a&DisplayLang=en

Windows SharePoint Services 3.0 with Service Pack 1: http://www.microsoft.com/downloads/details.aspx?FamilyId=EF93E453-75F1-45DF-8C6F-4565E8549C2A&displaylang=en

Visual Studio 2008 Express Edition in deutscher Sprache

Seit kurzem stehen die Express Editions von Visual Studio 2008 auch in deutscher Sprache zur Verfügung. Wie auch schon die Express Editions von Visual Studio 2005, sind diese Versionen ebenfalls kostenlos. Der Einsatz für in kommerziellen Projekten ist natürlich auch erlaubt.

Visual Studio 2008 Express

Info: http://www.microsoft.com/germany/express/
Download: http://www.microsoft.com/germany/express/download/default.aspx

Passend dazu gibts natürlich auch die MSDN-Versionen als Hilfedateien zum Download, um nicht bei jeder Anfrage auf die Antwort vom Browser warten zu müssen. (Auch ganz praktisch, wenn man mal mit der Bahn unterwegs ist 😉 )

MSDN Download: http://www.microsoft.com/germany/express/download/msdn.aspx

Wer gern wissen möchte, was ihm zur „Vollversion“ – also Standard oder Professional Edition fehlt – der kann sich unter folgender Seite informieren:

2008er Versionen im Vergleich: http://msdn2.microsoft.com/en-us/vstudio/products/cc149003.aspx