-
ACHTUNG - NEUES BLOG
Ab sofort steht unter http://devtyr.norberteder.com mein neues Blog zur Verfügung. Dieses Blog wird nicht weiter betreut, bleibt aber erhalten. Neue Eintr%auml;ge erfolgen nur mehr im neuen Blog. Kommentare werden ebenfalls nicht mehr behandelt. Wer weiterhin meinen Einträgen und Aktivitäten folgen möchte, möge bitte RSS-Feeds, Verlinkungen etc. an die neue Location anpassen.
|
CCTray: CruiseControl.NET Build-Fortschritt im Überblick
20.11.06 - .NET, Base Framework, 3rd Party Tools Beitrag von Norbert Eder| | Thomas Darimont hat mich auf ein weiteres hilfreiches Tool für CruiseControl.NET hingewiesen. CCTray [1]. Damit läßt sich der Build Progress überwachen und das Tool erlaubt es, in einige Operationen einzugreifen.
[1] CCTray Website
| | | 2 Kommentare
- 751 mal angesehen
| 0 Trackbacks
| Permalink | Trackback-URL |
CCNetConfig: CruiseControl.NET Konfigurationsdateien mittels Win-Forms-Anwendung erstellen
17.11.06 - Tools, 3rd Party Tools Beitrag von Norbert Eder| | Wer eine CruiseControl.NET [1] Installation sein Eigen nennt, dem dürfte CCNetConfig [2] als Unterstützung hilfreich sein. Mittels grafischer Oberfläche können damit CC.NET Konfigurations-Dateien einfachst erstellt werden.
[1] CruiseControl.NET
[2] CCNetConfig
PS: Wurde noch nicht von mir getestet, steht allerdings schon auf meiner ToDo-Liste.
| | | Kommentar hinzufügen
- 11 mal angesehen
| 1 Trackbacks
| Permalink | Trackback-URL |
Visual Studio: Bookmarks aller geöffneten Dokumente ohne Rückfrage entfernen
16.11.06 - .NET, Visual Studio Beitrag von Norbert Eder| | Wer viel mit Bookmarks arbeitet der kommt auch des öfteren in die Lage, alle gesetzten Bookmarks entfernen zu wollen. Hierfür gibt es das Tastenkürzel CTRL + B + C. Allerdings erscheint hier die Nachfrage, ob denn wohl wirklich alle entfernt werden sollen. Wer dies nicht möchte, kann sich folgendes Makro einbauen und dann einem Button/Shortcut zuweisen - und das ohne diese Nachfrage. Funktioniert für alle geöffneten Dokumente.
Public Sub RemoveAllBookmarks()
Dim i As Integer
For i = 1 To DTE.Documents.Count
Dim doc As EnvDTE.TextDocument
doc = DTE.Documents.Item(i).Object
doc.ClearBookmarks()
Next
End Sub
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL |
Interessante VS 2005 Tastenkombinationen
16.11.06 - .NET, Visual Studio Beitrag von Norbert Eder| | Durch Zufall heute auf zwei interessante Tastenkombinationen des Visual Studios 2005 gekommen.
[CTRL] + [´] : Korrespondierende/s Klammer/Tag anspringen
[CTRL] + ['] : Fokus in die Find-ComboBox setzen
Diese Tastenkombinationen funktionieren übrigens auch unter dem Visual Studio 2003. Vielleicht sollte ich mir echt einmal eine gesamte Liste reinziehen ;-)
| | | 1 Kommentar
- 501 mal angesehen
| 0 Trackbacks
| Permalink | Trackback-URL |
Zeitmessung einfach gemacht
16.11.06 - .NET, Base Framework Beitrag von Norbert Eder| | Soll ein Vorgang performant sein, empfiehlt es sich, unterschiedliche Ansätze zu testen. Diese müssen dann natürlich nicht nur auf Ressourcen-Verbrauch, sondern auch in zeitlicher Hinsicht getestet werden. Dies kann natürlich mit Hilfe von DateTime und TimeSpan erledigt werden. Das .NET Framework 2.0 enthält hier jedoch auch noch andere Mittel: Stopwatch aus dem System.Diagnostics Namespace.
Stopwatch kann dazu verwendet werden, einfach verbrauchte Zeiten zu messen. Dafür einfach instanzieren und los geht's. Start und Stop sind die entsprechenden Methoden.
Die Besonderheiten
1. Bei einem Stop wird die bereits verbrauchte Zeit nicht zurückgesetzt. D.h. bei einem neuerlichen Start beginnt der Zähler nicht bei Null, sondern inkludiert die bereits verbrauchte Zeit. Mit Reset kann der Wert auf Null zurückgesetzt werden.
2. Wem die Präzision und die Auflösung der Stopwatch-Implementierung nicht genügt, dem seien die Eigenschaften Frequency und IsHighResolution ans Herz gelegt.
Weitere Besonderheiten und generelle Informationen finden sich unter [1].
Hier noch ein kleines (sinnloses) Beispiel:
private void PerformanceTest()
{
System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch();
stopWatch.Start();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000000; i++)
{
sb.Append(" ");
}
stopWatch.Stop();
Console.WriteLine("Milliseconds used: " + stopWatch.ElapsedMilliseconds);
}
[1] MSDN: Stopwatch-Klasse (System.Diagnostics)
| | | Kommentar hinzufügen
- 9 mal angesehen
| 0 Trackbacks
| Permalink | Trackback-URL |
Klassen als obsolet (veraltet) markieren
15.11.06 - .NET, Base Framework Beitrag von Norbert Eder| | Vor allem bei der Entwicklung von Frameworks kommt es immer wieder vor, dass bestimmte Klassen durch andere ersetzt werden, da ein anderes Pattern eingezogen wurde, oder einfach nur eine bessere Implementierung gefunden wurde. Nun sollten diese Klassen nicht sofort aus dem Framework entfernt werden - aus Gründen der Kompatibilität zu älteren Versionen.
Hier bietet es sich an, diese Klassen als obsolet zu markieren. Dies kann folgendermaßen erreicht werden:
[Obsolete("BeschreibungsText", false)] // Keine Fehlermeldung
public class Test { }
[Obsolete("BeschreibungsText", true)] // Fehlermeldung
public class Test { }
Es stellt sich nun lediglich die Fraeg, wie lange diese Klassen im Framework erhalten bleiben sollten. Ich handhabe dies so, dass obsolte Klassen beim übernächsten Major-Release entfernt werden. Alle Minor-, Build-, oder gar Revision-Versionen werden nicht mit einbezogen. Dies bedeutet nun anhand eines Beispiels:
In der Version 2.0 eines Frameworks wird eine Klasse als obsolete markiert, dann fliegt diese in Version 4.0 tatsächlich hinaus. So bleibt genügend Zeit, auf die neue Klassenstruktur umzustellen.
| | | Kommentar hinzufügen
| 1 Trackbacks
| Permalink | Trackback-URL |
Verwendung des Namespace Alias Qualifier (::)
15.11.06 - .NET, Base Framework Beitrag von Norbert Eder| | Gehen wir von folgendem Code aus:
class Program
{
public class System { }
const int Console = 1;
const int number = 2;
static void Main(string[] args)
{
Console.WriteLine(number); // Problem
System.Console.WriteLine(number); // Problem
}
}
Hier wird eine Klasse System erstellt, ohne den System-Namespace des .NET Frameworks zu beachten. Zusätzlich gibt es einen privaten Member namens Console. Davon ausgehend können die zwei Aufrufe der Main-Methode nicht mehr funktionieren. Wie dem Abhilfe schaffen?
Dafür gibt es den Namespace Alias Qualifier (::).
global::System.Console.WriteLine(number); // Funktioniert
Und schon funktioniert es wieder.
Der Sinn? Vor allem bei Frameworks kann es passieren, dass Member eines globalen Namespaces (unabsichtlich) ausgeblendet werden. Durch den Namespace Alias Qualifier können diese jedoch ganz normal verwendet werden.
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL |
Settings Persistence Framework 1.0.3 Beta online
14.11.06 - Base Framework, Tools, SPF Beitrag von Norbert Eder| | Ab sofort gibt es die 1.0.3 Beta [1] des Settings Persistence Frameworks [2] verfügbar. Es sind zwar noch nicht alle Features implementiert, die ich mir vorstelle, jedoch gibt es eine nette neue Funktionalität:
Mit Hilfe des GeneralDbPropertySavers ist es nun möglich unterschiedlichste Datenbanken anzusprechen. Somit fällt die Beschränkung auf den Microsoft SQL Server. Dazu können alle Datenbank-Systeme verwendet werden, zu denen ein Data Provider installiert ist.
Wer immer einen Featurewunsch hat oder einen Bug findet, wird gebeten, diesen im Issue Tracker zu verewigen.
[1] Downloadseite SPF 1.0.3 Beta
[2] Projektseite Settings Persistence Framework (SPF)
| | | Kommentar hinzufügen
| 0 Trackbacks
| Permalink | Trackback-URL |
Wer noch folgenden RSS-Feed meines Blogs verwendet ...
13.11.06 - Blog-Intern Beitrag von Norbert Eder
Der Operator ??
13.11.06 - .NET, Base Framework Beitrag von Norbert Eder| | Als ich die Überschrift des Beitrages Der Operator ?? in C# von Thomas Woelfer gelesen habe, dachte ich mir zuerst einfach nur: Häh?.
Nachdem ich allerdings bei den Vorbereitungen zu einer Zertifizierung genau über diese Frage gestolpert bin, sage ich auf diesem Weg einfach mal Danke ;-) Ist ausserdem ganz nett zu verwenden.
Hier das Beispiel von Thomas, ich hoffe er ist mir nicht böse, dass ich es einfach so mal verwende:
void foo( string v)
{
string r = ( v == null ) ? "null" : v;
}
Variante mit dem ??-Operator:
void foo( string v)
{
string r = v ?? "null";
}
| | | Kommentar hinzufügen
| 1 Trackbacks
| Permalink | Trackback-URL | Zurück Weiter
|
|
|
|
|
|
|