.NET Blog   ·   .NET Casts   ·   .NET GUI Foren   ·   .NET BlogBook   ·   WPF Blogger   ·   visual studio one   ·   ASP.NET professional

  • 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.
Download .NET Essentials Installer
Trickkiste

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
 ... also http://blog.norberteder.com/rss.php, den würde ich bitten, die Feed-Url auf http://feeds.feedburner.com/NorbertEder-Livingnet umzustellen. Dies wurde von mir vor langer Zeit umgestellt, daher erkennt man dadurch auch Leser der Anfangszeit (siehe GENiALi).

  Kommentar hinzufügen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


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