Tickets werden knapp, beim Afterlaunch
31.03.2008 17:27:45
|
Albert Weinert
Wer sich noch keinen Platz beim Afterlaunch Community-Event in NRW gesichert hat muss sich nun beeilen. Es sind nur noch 24 20 12 10 5 0 Tickets zu vergeben. Also, meldet euch lieber schnell und bevor es zu spät ist.
http://www.afterlaunch.de
AfterLaunch ist eine Veranstaltung von der Community für die Community. Anlässlich der Vorstellung von Windows Server 2008, SQL Server 2008 und Visual Studio 2008 präsentieren die User Groups aus Bonn, Köln und vom Niederrhein unter Schirmherrschaft des JustCommunity e.V. am 11. April 2008 im Technologiepark in Köln einen Tag voll mit interessanten Themen, Tipps und Tricks. Ergänzend zum offiziellen Launch vermitteln Entwickler und IT-Professionals Wissen und Erfahrung aus ihrer täglichen Arbeit. Denn Launch war gestern - heute ist Praxis!

Die erste Konferenz zu Visual Studio Team System
31.03.2008 08:33:04
|
Thomas Schissler
Die Tatasache, dass sich Visual Studio Team System inzwischen zu einem Produkt mit
einer enormen Funktionsvielfalt entwickelt hat, wird schon alleine dadurch dokumentiert,
dass es vom 22.04 bis 24.04 eine Konferenz gibt, die sich nur mit diesem Produkt beschäftigt.
Die Vorträge decken dabei einen großen Bereich von Projektmanagement über Qualitätsmanagement
bis hin zu Best Practices und Erfahrungsberichte ab. Ich selbst werde auch mit einem
Vortrag zum Thema hierarchische
Workitems vertreten sein.
Wer schon mal einen Blick in die Zukunft werfen möchte, dem sei der Vortrag von Christian
Binder zum Thema Rosario ans
Herz gelegt.
Würde mich freuen, den einen oder anderen Leser meines Blogs auf der TeamConf persönlich
kennen zu lernen. Wer auch dort ist, kann mir einfach einen Kommentar hinterlassen.
Team Foundation Server Migration - ein Zwischenstand
30.03.2008 22:42:00
|
Jürgen Gutsch
Verwöhnt vom Team Foundation Server 2005 kam ich am 02.01.2007 in die neue Firma und musste feststellen, das ich wieder mit Visual SourceSafe arbeiten musste. Ein großer Rückschritt für einen der eine viel performantere Umgebung gewohnt ist...
Als ich erzählte, dass ich bereits mit dem TFS gearbeitet hatte, musste durfte ich diverse Microsoft Schulungen besuchen und mich in die Materie einarbeiten... Wie sich denn bei der Installation und im Laufe der Migration herausstellte, sind die Schulungen alle schön und gut, aber in der Praxis sieht es dann doch schon wieder ganz anders aus. Glücklicherweise hatten wir (ein Arbeitskollege und ich) uns entschlossen, ausführliche Tests zu fahren, was dann auch der eigentliche Grund für die dreiwöchige Migration ist.
Gegeben war eine viel zu große und total kaputte Visual SourceSafe Datenbank, ein etwas überladenes Bug-und Featuretracking und eine viel zu komplexe Buildautomation. Zu unserem Nachteil gibt es keine wirklich guten Tools die uns die Migration erleichtern haben.
Für die Migration der Sourcen von VSS in die TFS Source Control gibt es ein Komandozeilentool, welches mit Hilfe von zuvor erstellten XML Mapping-Dateien die Sourcen und deren History aus dem VSS holt und in den TFS importiert. Hört sich schön an, ist aber dennoch relativ schwierig, wenn die VSS DB a) zu Groß ist und b) viel zu viele Fehler enthält. Die VSS DB musste mehrfach repariert und in kleine Häppchen in den TFS importiert werden. Ein Nachteil an dem Komandozeilentool ist, dass alle Daten per XML Webservice in den TFS geschoben werden. Somit benötigen wir mehr als zwei Tage nur für den Import der Sourcen. Da ein parallel zum Import der Sourcen nichts am TFS gemacht werden kann (CPU und Speicher sind auf Anschlag, da das Komandozeilentool, der Webservice und der SQL Server alles in Anspruch nehmen), werden wir den Import der Bugs und Tasks ebenfalls verschieben müssen.
Der Import der Bugs und Features in den TFS läuft über einen Umweg: Raus aus der Tracking Software in CSV, Import nach Excel, aufbereiten und per Excel und dem TFS Plugin als Workitem in den TFS. Eine Automatisierung wäre toll gewesen, aber wer schreibt schon sowas für eine Migration die in einem Unternehmen normalerweise nur einmal gemacht wird. Die Schwierigkeiten hierbei waren a) bestimmte Felder die es im agilen Teamprozess nicht gibt und angelegt werden mussten und b) die Tatsache, dass die Daten des alten Bug Tracking komplett anders aufgebaut waren. Ich durfte mich also erst einmal hinsetzen und die Felder vergleichen und die Benötigten aussuchen und ggf. für das entsprechende Workitem anlegen. Beim ersten Export der Daten stellte sich heraus, dass unter anderem z. B. das Feld "Priority" in beiden Umgebungen komplett anders definiert wird:
- im alten System: 1 = High, 2 = Low, 3 = Middle
- im TFS: 1 = High, 2 = Middle, 3 = Low
Vor dem Einfügen der Daten in den TFS müssen also bestimmte Werte erst einmal umgeschrieben werden. Drei Stunden Arbeit, jeweils für die Bugs und die Features, bei jeden einzelnen Import-Versuch... (Denn natürlich stimmten nicht alle Feldzuordnungen auf Anhieb überein)
Die dritte Baustelle war die Buildautomation die viel zu komplex ist und sich nicht in den TFS übertragen lässt. Glücklicherweise bietet hier der Anbieter unserer Build-Automatisierungssoftware eine Schnittstelle zum Teambuild an. Wir können also unsere bestehende Buildautomation weiter verwenden und dennoch die Vorteile des Teambuild nutzen. Wenigstens dieses Problem war relativ einfach zu lösen.
Soweit so gut... Die Migration ist noch nicht ganz fertig. Schätzungsweise aber in zwei Tagen. Ich freue mich schon... endlich wieder TFS, endlich wieder performantes Arbeiten...
:-)
AfterLaunch: Nur noch zwei Wochen - jetzt anmelden!
29.03.2008 18:54:00
|
Roland Weigelt

Es braut sich etwas zusammen in Nordrhein-Westfalen! Anlässlich der Vorstellung von Windows Server 2008, SQL Server 2008 und Visual Studio 2008 haben sich die User Groups aus Bonn (Bonn-to-Code.Net), Köln (.net User Group Köln) und vom Niederrhein (.net developer user group niederrhein) zusammengetan, um unter der Schirmherrschaft des JustCommunity e.V. ergänzend zum offiziellen Launch ein Community-Event der besonderen Art auf die Beine zu stellen:
- Ein ganzer Tag voller Vorträge, verteilt auf drei parallele Tracks
- Sprecher, die als Entwickler und IT-Professionals aus ihrer täglichen Arbeit heraus Praxiswissen vermitteln
- Große Verlosung von Software (Not-for-resale Versionen von Windows Server 2008, SQL Server 2008 und Visual Studio 2008, Lizenzen für CodeRush with Refactor! Pro, Resharper und dotTrace, ANTS Profiler und SQL Compare Pro)
- Vielfältige Möglichkeiten zum Networking mit anderen Teilnehmern und Firmen aus der Region
Und das zu einem Preis von nur 8,- Euro, in dem auch noch Verpflegung, Getränke und Parkausweis enthalten sind.
Freitag 11. April 2008
KonferenzZentrum im Technologiepark Köln
Anmeldung und weitere Infos auf www.afterlaunch.de
TeamConf 2008
28.03.2008 15:33:00
|
Christian Binder
am 22-24 April 2008 findet die TeamConf2008 in München statt.
http://www.teamconf.de/
Auch ich werde mit folgenden Vortägen am Start sein :-)
Wie nutzt Microsoft VSTS? Am Beispiel der Produktentwicklung der MS Developer Division.
Erhalten Sie ein Einblick wie das notwendige Project Management umgesetzt wurde. Welche Quality Gates verwendet werden. Welche Probleme wir hatten. Nehmen Sie die eine oder andere Anregung für Ihren Entwicklungsprozess mit
NEXT: Microsoft VSTS code name „Rosario“
Lernen Sie die nächste VSTS Generation kennen! Erhalten Sie ein Überblick, was die nächste VSTS Generation mitbringen wird. Sehen Sie einige der Neuerungen des aktuellen CTP’s
VSTS Web und Load-Testing Möglichkeiten mit VSTS 2008
Mit Oliver Hilgers, einem unserer Development Consultants mit viel praktischer Erfahrung in diesem Bereich, werde ich zeigen, was man so alles mit VSTS Webtests und Loadtests machen kann. Auch werden wir den Prozess Performance Testing in Bezug auf Webtests genauer beleuchten.
Auch sollten Sie Thomas Schisslers Vortrag Implementierung einer hierarchischen Workitem-Organisation mit Hilfe der TFS API nicht verpassen!
Allso es lohnt sich:-)
Chris
Singleton Pattern
27.03.2008 18:15:00
|
Peter Bucher
Auf gehts, das nächste Pattern nach Strategy.
Heute geht es darum, sicherzustellen, das von einer Klasse nur eine Instanz erstellt werden kann, dies ist bspw. bei einer Logging Klasse, einem Desktop Programm oä. nützlich.
Im Grunde verhindert dieses Pattern das Erstellen von Instanzen durch den Konstruktor.
Der ganze Trick besteht darin, den Konstruktor private zu setzen, sodass dieser nur intern verwendet werden kann.
Zudem braucht es einen statischen Member in der Klasse, der die einzigartige Instanz hält.
Um an trotzdem von Aussen an eine Instanz zu kommen, spendieren wird der Klasse eine öffentliche Methode bspw. Namens "getInstanz", in dieser wird - wen noch nicht vorhanden - ein Objekt erstellt, und zurückgegeben.
Eine Klasse die das Singleton Pattern anwendet, ist nicht "nur" ein Singleton, sondern enthält (sinnvollerweise) immer auch noch weitere Daten und Methoden (Wie am zweiten Beispiel zu sehen ist).
(Die Beispiele lehnen sich an Java an, in C# wirds auch mit einer Eigenschaft + get gehen)
Minimales Beispiel:
using System;
using System.Collections.Generic;
using System.Text;
namespace SingletonExample
{
class Program
{
static void Main(string[] args)
{
Logger l = Logger.getInstance();
Console.WriteLine(l == null);
Console.Read();
}
}
public class Logger {
private static Logger instance;
private Logger() {
}
public static Logger getInstance() {
if (instance == null)
instance = new Logger();
return instance;
}
}
}
Ein "erweitertes" Beispiel mit mehr Sinn:
using System;
using System.Collections.Generic;
using System.Text;
namespace SingletonExample
{
public class App
{
private Logger _logger;
public void Run() {
this._logger = Logger.getInstance();
this._logger.Add("Programm Fehler");
this._logger = Logger.getInstance();
foreach (string error in this._logger.Errors) {
Console.WriteLine(error);
}
Console.Read();
}
}
public class Logger
{
private List<string> _errors = new List<string>();
private static Logger instance;
public List<string> Errors {
get { return this._errors; }
set { this._errors = value; }
}
private Logger() { }
public static Logger getInstance() {
if (instance == null) {
instance = new Logger();
}
return instance;
}
public void Add(string error) {
this._errors.Add(error);
}
}
}
Definition des Singleton Patterns:
Das Singleton-Muster sichert, dass es nur eine Instanz einer Klasse gibt, und bietet einen globalen Zugriffspunkt für diese Instanz.
Und am Schluss das kleine aber feine Klassendiagramm:

An einem GET Formular feststehende Werte mitgeben
27.03.2008 17:40:00
|
Peter Bucher
Typisches Beispiel, ein Suchformular.
Dieses sollte per GET (method="get") abgeschickt werden, um das Suchergebnis auch Linken zu können.
Wenn die Seite jetzt aber noch auf zusätzliche Parameter angewiesen ist, können die feststehenden Parameter nicht einfach an die Url im "action" Attribut des Formulars angehängt werden, weil diese überschrieben werden.
D.h. bei sowas:
<form name="myForm" action="suche.aspx?param1=value1" method="get">
...
</form>
Geht der Parameter "param1" ins Nirvana.
Um sowas trotzdem zu erreichen, kann ein dieser Wert in ein HiddenField _innerhalb_ des jeweiligen Formulars platziert werden.
Bspw. so:
<form name="myForm" action="suche.aspx" method="get">
<br type="text" name="suche" />
<input type="hidden" name="param1" value="value1" />
<input type="submit" value="Los..." />
</form>
Nach dem Abschicken des Formulars bekommt man so dir richtige, gewünschte Url:
seite.aspx?param1=value1&suche=asp.net
(Hier wurde "asp.net" in das "suche" Feld eingetragen)
Wink an: Michael :-)
Gratis XML.NET Buch
27.03.2008 09:49:29
|
Jan Welker
Der Online-Buchversand Terrashop bietet allen .NET-Forum.de -
Usern das Buch
XML und Web Services mit dem .NET Framework kostenlos an.
Das Angebot ist bis zum 1.Mai 2008 gültig.
Es fallen lediglich Versandkosten in Höhe von 3,95€ an.
Ab einem Bestellwert von 20,- € ist die Bestellung versandkostenfrei!
Hier
geht es zur Aktion.
Webradio Sidebar Gadget
25.03.2008 23:23:26
|
Jan Welker
Für alle die gern beim Programmieren Radio hören dürfte dieses Vista Gadget sehr interessant
sein.
Das Gadget bietet eine große Auswahl von Radiosenden an die einfach angeklickt werden
können. Im Hintergrund werkelt der Windows Mediaplayer. Die Bedienung erfolgt aber
komplett über das Gadget.
Die Liste der Radiosender kann sehr einfach über eine Textdatei angepasst werden.
Download
in der Windows Live Gallery
dotnet-forum.de Individualisieren
25.03.2008 22:54:02
|
Jan Welker
auf der Startseite des dotnet-forum.de ist folgendes
zu lesen: „Es werden alle Bereiche abgedeckt. Von der Entwicklung von Clientanwendungen,
Webapplikationen, bis zur Add-In Entwicklung für das Visual Studio.“
Diese Fülle an Themen bringt leider einen kleinen Nachteil mit sich, die Anzahl der
Unterforen (zur Zeit 30), ist sehr hoch, dies kann schnell unübersichtlich werden.
Vermutlich interessieren sich nicht alle Forenmitglieder für alle Themen bzw. Unterforen.
Die Foren – Software bietet hier ein sehr nützliche Funktion, das Individualisieren
des Forums.
Durch einen Klick auf diesen unscheinbaren Link
gelangt man zu einer sehr komfortable Oberfläche (Ajax) mit der man einzelne Unterforen
ein und ausblenden kann.
So können z.B. Webentwickler alle Foren ausblenden die sich mit der Entwicklung von
Windows Clients beschäftigen.
Praktische Sache!
MbUnit PlugIn for R# 4.0 available
24.03.2008 13:09:11
|
Albert Weinert
Vista und Virtual PC Soundkarte (Soundcard) Problem
23.03.2008 13:36:00
|
Ozgur Aytekin
Nach dem ich ein neues Virtual PC mit Vista als Guest OS installiert habe, meldet Vista einen Fehler betreffend der Soundkarte (Soundcard). Es fehlt der Soundkarte-Treiber.
Ich bin davon ausgegangen, wenn ich die Virtual Machine Additions installiere, sollten alle Komponenten automatisch vom Vista erkannt werden. Ausser der Soundkarte wurden alle anderen Treiber automatisch installiert.
Nach der Installation von Virtual Machine Additions kopiert Virtual PC in das Verzeichnis C:\Program Files\Virtual Machine Additions diverse Files. Auch der Soundkarte-Treiber befindet sich in diesem Verzeichnis. Wir müssen Virtual PC und Vista nur einbisschen nachhelfen, damit der nötige Treiber installiert werden kann.
Folgende Schritte sind für die Installation vom Treiber nötig:
1. Auf dem Desktop My Computer auswählen und mit der rechten Maustaste drauf klicken. Anschliessend Menüeintrag Manage auswählen.
2. Im Tree Device Manager auswählen.
3. Im rechten Tree unter Other devices finden wir die Soundkarte. Mit der rechten Maustaste auf den Eintrag Multimedia Audio Controller klicken.
4. Browse my computer for driver Software auswählen.
5. Unter Search for driver software in this location das Verzeichnis auswählen, in dem die Virtual Machine Additions installiert wurden. Anschliessend mit Next klicken.
6.Nach eine erfolgreiche Installation erscheint das folgende Fenster.
Viel Spass.

Inkrementelle Suche im Visual Studio
22.03.2008 19:58:36
|
Jan Welker
Ich hatte vor einigen Wochen auf die Suchmöglichkeit mit dem Visual Studio AddIn SonicFileFinder hingewiesen.
Heute bin ich durch Zufall auf einen sehr nützlichen Shortcut im Visual Studio gestoßen.
Mit Strg+I ruft man die Inkrementelle Suche auf, der Vorteil dieser Suchvariante ist,
dass mögliche Fundstellen schon während dem Tippen angezeigt werden. Der aktuell eingetippte
Suchstring wird dabei in der Statuszeile angezeigt.
Die aktivierte inkrementelle Suche erkennt man an dem Mauszeiger mit dem Fernglass.
Diese Suchvariante hat auch zwei kleine Nachteile die man berücksichtigen sollte.
Es wird nur im aktuellen Dokument gesucht und ausgeblendete Quelltextbereiche werden
ebenfalls ignoriert.
Weiterführende Informationen gibt es in der MSDN.
DELL Latitude D620 und die Sound-Aussetzer unter Vista
22.03.2008 18:21:43
|
Albert Weinert
Eine Sache plagt mich ja schon ein wenig länger bei meinem kleinen Laptop.
Beim abspielen von Musik kam es immer wieder zu aussetzern, System-Sound ertönten manchmal verspätet. Irgendwie ärgerlich.
Im Internet liest man dass wohl ein Treiberproblem sei und mit aktuellen Treibern dass Problem behoben werden können.
Ja, soweit verständlich und auch logisch. Problem ist nur das es auf den DELL Seiten der SigmaTel Audio-Treiber von Januar 2007 ist und nichts neues in Sicht ist. Auch verweisen die üblichen Treiber-Seiten immer wieder auf den DELL-Treiber auch wenn ich nicht explizit nach DELL gesucht habe.
Habe ich also erst mal den ChipSatz Treiber von Intel für den Chipsatz des Laptops geholt und eingespielt. Da auch der auf der DELL ein wenig veraltet war.
Dieser hat jedoch nicht beim Sound-Problem geholfen.
Irgendwo habe ich dann davon gelesen dass Realtek HD Audio Treiber wohl zu vielen OnBoard Chipsätzen kompatibel sind und bei einem dessen Sound-Probleme dadurch behoben wurden.
Was habe ich zu verlieren dachte ich mir ;) Sei keine Pussy. Die Realtek Seite gesucht, den Download der Treiber angestoßen und parallel dazu die SigmaTel Treiber deinstalliert. Nun die Realtek Treiber installiert => Neustart.
Nach dem Neustart dann gebannte Stille, wird der Laptop wieder Töne von sich geben, bis zum Anmelde-Schirm gab es schon mal nichts auf die Ohren. Nach der Anmeldung dann die ersten Töne. Fein.
Dann MediaPlayer gestartet: "Wow. Der legt ja direkt los ohne drüber nachzudenken" so wie früher unter XP :) Aussetzer hatte ich bis jetzt auch noch keine und die System Sounds scheinen auch pünktlich abgesetzt zu werden. Hoffen wir mal dass dies auch zu bleibt.
So, vielleicht hilft dies ja auch noch anderen. Deshalb hier die Treiber Download: Realtek High Definition Audio Codecs
CeBIT '08 - Smart Projecting & Facial Recognition
22.03.2008 08:52:00
|
Lori Grosland

At CeBIT a couple of weeks ago I got the chance to talk with two German startup companies that were there to present their innovative products.
Benjamin Fritsch from VIOSO filled me in on their Smartprojecting product that makes it possible to adapt any projection and show it on any surface. The Smartprojecting system consists of a camera, a computer and a projector and the correction of the content is done right before it is projected. The geometric and color distortions as they would appear with normal projection can be dramatically reduced and the correction works pixel accurate.
Andreas Wiratanaya from CanControls showed me their facial recognition wheelchair with a video-based facial expression controller. CanControls specializes in digital image processing for advanced man-machine interaction. The wheelchair software analyzes the facial expressions and gestures of the driver and can be controlled by actions such as blinking, tilting of the head or opening of the mouth.
VIOSO Website…
http://www.vioso.com/en/welcome.html
VIOSO German Video…
http://www.on10.net/blogs/lorigros/21468/
CanControls Website…
http://www.cancontrols.com/
CanControls German Video…
http://www.on10.net/blogs/lorigros/CeBIT-08-Mimik-steuert-Rollstuhl/
Colorwars 2008 bei Twitter
21.03.2008 22:07:59
|
Albert Weinert
CeBIT '08 - Meet People on Every Website
21.03.2008 20:13:00
|
Lori Grosland

I spoke with Nikolai Roth from zweitgeist at the CeBIT in Hannover a couple of weeks ago. He showed me their product called Weblin, which is software that enables people on the same web page to see and communicate with each other. While you are surfing, you and others on the same web page are visible to each other as small avatars and you are able to interact and chat with each other. The idea behind Weblin is to make the Internet come alive and create the largest virtual world of all. Nikolai filled me in on how Weblin works and what kinds of features are available.
For more info about Weblin, check out their website…
http://www.weblin.com
German version of video…
http://www.on10.net/blogs/lorigros/CeBIT-08-Weblin/
Speicherplatz nach Vista SP1-Installation freigeben
21.03.2008 15:53:45
|
Albert Weinert
Bei wem dass Service Pack 1 für Windows Vista gut läuft und es nicht mehr deinstallieren möchte. Der verschenkt wertvollen Speicherplatz auf seiner System-Partition wenn er die zur Deinstallation benötigten Dateien nicht löscht.
Beim Vista-Blog ist beschrieben wie man sich den Speicherplatz, ohne wilden Tricks, wiederholen kann.
http://www.vistablog.at/stories/22834/
Das geht schnell und schmerzlos.
Technorati-Tags:
Vista,
Vista SP1
Community-Veranstaltung zum Thema C++ in Visual Studio 2008
20.03.2008 12:20:00
|
Christian Binder
Am 17. April bieten wir für die C++-Entwickler-Gemeinschaft eine dreistündige Veranstaltung zum Thema C++ in Visual Studio 2008 und dem VS2008 Feature Pack für C++ in Frankfurt/Main. Wir haben zwei Program Manager aus der Product Group eingeladen und sie werden folgende Themen vortragen.
Der Vortrag wird in Englisch gehalten werden.
Top-Themen der Veranstaltung:
- What's new in Visual Studio 2008
- walkthrough new C++ features
- VSTS for C++ developers
- A deeper look into the VS2008 Feature Pack for C++
- demo of improvements to MFC
- the value of TR1
- A brief glimpse into the future of Visual C++
- highlights from what we're building for the next version of C++
Fast Facts:
Speaker:
Boris Jabes is a program manager on the Visual C++ team. He is responsible for improving the IDE experience for C++ developers with a focus on furthering the quality of source editing, understanding, and analysis. Recently, he's been concentrating on making the IDE scale to multi-million line source bases. Before joining Microsoft, Boris obtained degrees from the University of Waterloo and Carnegie Mellon where he specialized in distributed systems and software engineering.
Blog:
http://blogs.msdn.com/borisj
Die Teilnahme an der Veranstaltung ist kostenfrei. Melden Sie sich am besten gleich für die Veranstaltung per E-Mail an!
Anmeldung hier.
Chris
Jing Project: Screencasts ganz einfach erzeugen und verteilen
20.03.2008 08:51:57
|
Thomas Schissler
Bin gerade auf das Jing-Projekt gestoßen. Damit lassen sich ganz einfach Screenshoots
und Screencasts erstellen. Auf Wunsch kann man die Ergebnisse bei Screencast.com hochladen
(ein kostenloser Account wird bei der Installation mit eingerichtet) oder in Flickr
bzw. auf einem eigenen FTP-Server oder einem Fileshre ablegen.
Werde das mal testen, ob sich damit meine Blog-Beiträge etwas aufwerten lassen.
Download Jing-Projet
Automatisierte UI-Tests
20.03.2008 00:45:12
|
Thomas Schissler
Weitgehend unbemerkt von der breiten Masse der Entwickler bringt das .net Framework
3.0 auch eine Bibliothek zum Erstellen von automatisierten UI-Tests mit. Unter %PROGRAMFILES%\Reference
Assemblies\Microsoft\Framework\v3.0 finden sich folgen sich die benötigten DLLs. Damit
kann man UI-Tests selbst programmieren und auch in Unit-Tests integrieren. Das entspricht
zwar nicht der weit verbreiteten Erwartungshaltung, die eher von einer "Record &
Play" Methode ausgehen, bietet aber verschiedene Vorteile in Bezug auf Wartbarkeit
und Stabilität.
Ich habe hier mal ein kleines Beispiel gebaut, das den Einsatz demonstriert:
>
Ich werde in Kürze weitere Details bloggen und verschiedene Einsatzgebiete, Erweiterungen
und auch Grenzen aufzeigen. Auch ein Webcast ist zu dem Thema geplant. Bis dahin erst
mal ein paar weiterführende Dokumente. Leider ist da im Moment noch nicht sehr viel
publiziert worden.
http://msdn2.microsoft.com/en-us/magazine/cc163288.aspx
http://msdn2.microsoft.com/en-us/accessibility/bb892133.aspx
Das Tool ist auf jeden Fall interessant und da es kostenlos mit dem .net Framework
mitkommt, sollte jeder der sich mit Software-Tests beschäftigt mal einen Blick drauf
werfen.
TFS SDK Docu wieder verfügbar
19.03.2008 21:24:12
|
Thomas Schissler
Imagine Cup 2008 - Auf nach Paris!
18.03.2008 19:05:00
|
Lori Grosland

Ich habe mit Henrike Röse, Academic Event Manager bei Microsoft über den Imagine Cup gesprochen. Der Imagine Cup ist der weltweit größte Technologiewettbewerb für Schüler und Studierende ab 16 Jahren. Microsoft richtet diesen Wettbewerb bereits zum 6. Mal in Folge aus und jährlich werden es mehr Teilnehmer die ihren Ideen und ihrer Kreativität freien Lauf lassen und ihre Projekte in einer der 9 Kategorien einreichen.
Neben internationalem Networking (im vergangenen Jahr waren rund 100 Nationen aus der ganzen Welt vertreten!) gibt es wertvolle Sach- und Geldpreise in Höhe von bis zu 15.000 US$ und eine Reise zum weltweiten Finale im Juli nach Paris zu gewinnen!
Es gibt sowohl technologische Kategorien wie Software Design und Game Development aber auch Design-Kategorien wie Kurzfilm, Fotografie oder Interface Design.
Der Wettbewerb steht jedes Jahr unter einem Motto: nach den Themen Gesundheit und Bildung in den letzten Jahren lautet das diesjährige Motto: "gesündere Umwelt und besserer Umweltschutz durch Technologie"
Mitmachen kann man jetzt noch in folgenden Kategorien: Fotografie: einfach bis zum 2.Mai 2008 eine Fotoserie von bis zu 10 Bildern zum Thema Umwelt auf deinen Windows live space hochladen !
Oder bei den Sonderawards der Kategorien Software Design und Interface Design teilnehmen.
Neben internationalem Networking (im vergangenen Jahr waren rund 100 Nationen aus der ganzen Welt vertreten!) gibt es wertvolle Sach- und Geldpreise und die Reise zum weltweiten Finale im Juli nach Paris zu gewinnen!
Die Kategorie Software Design ist die einzige der 9 für die in jedem der teilnehmenden Länder Vorrunden durchgeführt werden. In Deutschland gibt es vier regionale Finale (München, Dresden, Düsseldorf und Hamburg). Aus jeder Region wird 1 Team zum nationalen Finale nach Berlin eingeladen. Im Rahmen einer großen Student Technologie Conference wird im Mai 2008 das Team ausgewählt, das die deutsche Fahne beim internationalen Finale in Paris hochhalten wird!
Du kannst dabei sein wenn die Entscheidung fällt. Es wird Vorträge zu den aktuellen Technologiethemen, Networking und vieles mehr geben; auf der STC 2008!
Alle informationen unter www.imaginecup.info
CeBIT '08 - Stephan Walcher & Live Writer Blog
18.03.2008 18:57:00
|
Lori Grosland

Stephan Walcher ist Microsoft-MVP und leidenschaftlicher Blogger. Er führt unter anderem den populären Live Writer-Blog in drei Sprachen: Deutsch, Italienisch und Englisch und verfügt vermutlich über die größte Plugin-Sammlung für Live Writer außerhalb der Windows Live Writer Plugin Gallery – darunter Plug-Ins für Video-Einbettung, Integration der IMDB (Internet Movie Database), Übersetzung und viele andere Sachen – und kennt die deutsche Bloggerszene seit den Anfängen. Wer interessante Insideransichten über die Unterschiede zwischen deutschen und italienischen Blogs erfahren will, oder erfahren möchte wie Stefan ohne Internet über seine Tour entlang der Westküste der USA mit GPS und Virtual Earth bloggen wird, der sollte sich diesen Beitrag unbedingt ansehen.
MSDN Magazine March 2008
18.03.2008 18:26:00
|
Ozgur Aytekin
MSDN Magazine March 2008 könnt Ihr unter http://msdn2.microsoft.com/en-us/magazine/cc301916.aspx herunterladen.
Unter der Kolumne Data Points findet Ihr ein interessantes Artikel über LINQ.
Data Points: Standard Query Operators with LINQ
LINQ to Objects and LINQ to Entities have an arsenal of Standard Query Operators that operate on sequences to perform a wide variety of operations. John Papa
Die Verwendung von LINQ to XML mit Office 2007 Dateien findet Ihr unter der Kolumne Advanced Basics.
Advanced Basics: Office 2007 Files and LINQ
LINQ to XML and the Microsoft SDK for Open XML Formats simplify access to the parts of a 2007 Office system Open XML document when retrieving or modifying data, resulting in shorter, less complex code. Ken Getz
Viel Spaß beim Lesen

Eigene Favoriten auf dotnet-snippets.de anlegen
18.03.2008 17:51:28
|
Jan Welker
Seit einigen Tagen ist ein neues Feature auf dotnet-snippets.de verfügbar.
Es ist möglich, sich auf dotnet-snippets.de eine Liste eigener Favoriten zusammenzustellen.
So hat man seine Lieblings-Snippets immer zur Hand, egal auf welchem Rechner man arbeitet.
Die neue Funktion steht nur für registrierte und eingeloggte Mitglieder zur Verfügung.
Noch nicht registriert? Für die Registrierung reicht
eine gültige Emailadresse, sie ist kostenlos und unverbindlich.
WCF Designer
17.03.2008 23:54:52
|
Thomas Schissler
Mit diesem DSL Tool kann man WCF-Services einfach un komfortabel mit Hilfe eines Designers
im Visual Studio bauen. Echt schick!
Wie der Class-Designer hat man Two-Way-Synchronisation zwischen Code und Designer.
Alle wichtigen Code-Elemente können durch den Designer erstellt werden.
Schade nur, daß das Tool unter VS2008 momentan noch nicht verfügbar ist.
Ein Video in dem man das Tool in Aktion sehen kann gibt es hier.
Weitere Infos und Downloads gibt es hier.
WPF-Anwendung mit Splash Screen
17.03.2008 18:42:00
|
Klaus Bock
Da ich für ein Projekt immer wieder Zugriff auf diverse Leistungsindikatoren brauchte, überlegte ich mir eine kleine Helfer-Anwendung zu schreiben. Wenn schon eine neue Anwendung warum nicht gleich mit WPF, so als kleine Übung. Das klappte auch recht gut. Nur fiel mir beim Ausführen der Anwendung in C# Express eine sehr lange Startphase auf. Also einen Release-Build erstellt die Anwendung direkt gestartet; mit dem gleichen Ergebnis. Zurück im Debugger, und einige Stopwatch-Auswertungen später, war klar dass das laden der Leistungsindikatoren in eine ObservableCollection<T> doch sehr lange dauerte. Der unschöne Effekt dabei war, dass die Anwendung erst auf dem Desktop sichtbar wurde, nachdem alle benötigten Objekte geladen waren. Jetzt stelle ich mir einen Benutzer vor der auf die Verknüpfung der Anwendung klickt und nach 5 Sekunden ist immer noch nichts passiert. Wie das endet kann sich jeder selbst ausmalen. In diversen Foren konnte ich nachlesen dass dieses Verhalten bekannt ist. Meist wird empfohlen einen Startbildschirm während des Ladens anzuzeigen. Die Recherche zu dem Thema förderte die verschiedensten Möglichkeiten zu Tage. Meistens wurde zum laden einer Grafik mittels PInvoke geraten. Das mag zwar eine sehr schnelle Lösung im Startverhalten sein, aber nicht dass was ich wollte. Nach dem Durchforsten von vielen weiteren Lösungsansätzen bin ich auf diese Diskussion im MSDN-Forum gestoßen. Der Beitrag von TomGiam gefiel mir auf Anhieb. Vor allem bleibt bei seiner Lösung das Initialisieren des Splash Screen, die Interaktion mit diesem währen des Ladens der zeitintensiven Objekte, sowie das Laden der Hauptanwendung an einem Platz; in der App-Klasse. Die gesamte Interaktion, sowohl mit der SplashScreen- als auch mit der Window1-Klasse, wird sauber und Cross-Thread safe mittels Delegaten gehandhabt.
Auf diesem Konzept aufbauend habe ich die Lösung in meiner Anwendung realisiert und war erstaunt wie schnell der Splash Screen geladen wurde. Obwohl komplett auf WPF basierend. Im einzelnen ein WPF-Fenster mit ProgressBar und einem TextBlock zur Ausgabe der Statusmeldungen sowie einem Button um die Anwendung währen des Ladens abbrechen zu können.
Da der gesamte Ladevorgang in einer Methode in der App-Klasse abläuft, kann der Fortschritt sowie evtl. Statusmeldungen jederzeit auf dem Splash Screen ausgegeben werden. Wenn alle benötigten Objekte geladen wurden, können diese einfach an eine Überladung des Kontruktors der Window1-Klasse übergeben werden.
Mir gefiel diese Lösung so gut, dass ich mir eine Projektvorlage daraus erstellt habe. Für interessierte habe ich einmal das Konzept als C# Projekt angehängt sowie eine fertige Projektvorlage als MSI Installer. Den Installer habe ich für den Template-Pfad unter C# Express erstellt. Ob diese Pfad auch in Visual Studio stimmt, weiß ich nicht.
Über Rückmeldungen und Kritiken, in jeder Form, würde ich mich freuen.
Downloads:
WPF Splash Screen Projekt herunterladen
WPF Splash Screen Template herunterladen
Ich bin im Fernsehen ...
16.03.2008 18:34:49
|
Albert Weinert
Nun ja, fast ... immerhin bewegte Bilder mit Ton in Farbe und bunt.
Einmal auf on10.net bei Lori Grosland, dort jedoch erst ab der 6. Minute, mit ein paar Informationen zum Afterlaunch.
Microsoft Launch 2008
Und ein paar Sätze von mir zum Einsatz beim "Ask-The-Experts" auf dem Microsoft Launch Event 2008 wo ich mich den knallharten Fragen von Katrin Letzel stellte.
http://channel9.msdn.com/Showpost.aspx?postid=387603
Problem bei der Verschlüsselung von app.config-Dateien in Netzwerk-Anwendungen bei unterschiedlichen Clients
13.03.2008 13:09:00
|
Mario Meir-Huber
Der Microsoft Student Partner, Roman Schacherl (FH Hagenberg) ist auf ein sehr interessantes Problem bei der Verschlüsselung von ConnectionStrings mit verschiedenen Clients gestoßen. Der Lösungsansatz ist unten aufgelistet:
Diese Anleitung beschreibt die Verschlüsselung eines Connection Strings in der app.config einer .NET
2.0 Windows-Anwendung, die über das Netzwerk aufgerufen wird. Dabei ist es notwendig, den
privaten Schlüssel der Verschlüsselung auf den Client-Rechner zu übertragen – ansonsten ist keine
Entschlüsselung mehr möglich.
Unverschlüsselte Konfigurationsdatei
In der app.config-Datei steht im Abschnitt <connectionStrings> die Verbindung zur
Datenbank:
|
<connectionStrings>
<add name="testConnectionString" connectionString="Data Source=pc-roman;Initial Catalog=testdb; user id=test_user;password=test_pwd" providerName="System.Data.SqlClient" />
</connectionStrings>
|
Erstellen eines RSA-Schlüsselcontainers
Mit Hilfe des Tools aspnet_regiis wird ein neuer Schlüsselcontainer erstellt. Führen Sie
folgenden Befehl in einer Eingabeaufforderung im Ordner
„C:\Windows\Microsoft.NET\Framework\v2.xxx“ aus:
| aspnet_regiis –pc "TestKeys" -exp |
Hinzufügen eines ProtectionProviders
Fügen Sie unmittelbar vor dem Abschnitt <connectionStrings> folgenden
<configProtectedData>-Abschnitt hinzu, wobei das Attribut name der Name des
ProtectionProviders ist (später wichtig) und der keyContainerName der Namen des soeben
erstellten Schlüsselcontainers sein muss.
|
<configProtectedData> <providers> <add name="TestProvider" type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" keyContainerName="TestKeys" useMachineContainer="true" /> </providers> </configProtectedData> |
Verschlüsseln der Konfigurationsdatei
Mit folgendem Sourcecode können Sie die Verschlüsselung der app.config bewirken. Der
Parameter der Methode OpenExeConfiguration muss dabei dem Pfad der exe-Datei und nicht
der exe.config-Datei entsprechen!
Configuration conf = ConfigurationManager.OpenExeConfiguration(exeFilename);
ConfigurationSection section = conf.GetSection("connectionStrings");
if (section != null)
{
if (!section.IsReadOnly())
{
section.SectionInformation.ProtectSection("TestProvider");
conf.Save();
Der Abschnitt <connectionStrings> in der Konfigurationsdatei ist nun verschlüsselt:
Die Anwendung ist lokal weiterhin lauffähig, solange der entschlüsselnde Rechner gleich
dem verschlüsselnden Rechner ist. Für die Entschlüsselung sorgt .NET automatisch. Um die
Anwendung auch über das Netzwerk lauffähig zu machen, muss zuerst der
Schlüsselcontainer exportiert und importiert werden.
Exportieren des Schlüsselcontainers
Zum Exportieren des Schlüsselcontainers in eine xml-Datei wird wieder das Tool
aspnet_regiis verwendet:
| aspnet_regiis –px "TestKeys" "C:\test-keys.xml" -pri |
Importieren des Schlüsselcontainers
Auf jedem Client, auf dem die Anwendung lauffähig sein soll, muss jetzt der
Schlüsselcontainer wieder importiert werden:
| aspnet_regiis –pi "TestKeys" "C:\test-keys.xml" |
Anschließend liegt der Connection String in verschlüsselter Form vor und wird beim Start der
Anwendung (auch über das Netzwerk) automatisch entschlüsselt.
Dabei muss hingewiesen werden, dass es sich nur um eine relativ einfache Sicherheitsmaßnahme
handelt – nachdem der Private Key bekannt ist, lässt sich relativ leicht ein kleines .NET-Programm zur
Entschlüsselung und Anzeige der Konfigurationsdatei im Klartext erstellen.
Zusätzlich zu den beschriebenen Maßnahmen muss die Codezugriffssicherheit am Client angepasst
werden, um die Ausführung der Anwendung über das Netzwerk überhaupt zu erlauben.
Gefunden von: Roman Schacherl - www.schacherl.info
TechDays'08 Ich komme...
13.03.2008 08:00:00
|
Jürgen Gutsch
Da komme ich doch heute ganz unbekümmert ins Büro und finde auf meinem Schreibtisch einen Brief aus der Schweiz.
Inhalt: Ein Schreiben mit dem Betreff "Microsoft TechDays'08 Ihre Teilnehmerunterlagen" und ein im Schreiben integrierter Teilnehmerausweis zum selber Basteln.
Cool! Nicht nur das die Teilnehmerunterlagen angekommen sind, sondern auch wegen des interessanten, waabenartigen Etwas in der Mitte des Teilnehmerausweis, das sich nach näherer Betrachtung und nochmaligen Durchlesens des Schreibens als ein sogenannter BeeTagg (www.beetagg.com) entpuppte. (Wieder eine interessante Web 2.0 Idee)
Ich freue mich auf jeden Fall schon auf die zahlreichen Sessions, sowie die große Launch-Party am Mittwoch Abend, viele Gespräche und darauf viele bekannte Leute zu treffen. Unter anderem sind auch Thomas Huber und Peter Bucher aus ASP.NET Zone anwesend.
Thomas on Tour
12.03.2008 20:51:13
|
Thomas Schissler
Ich bin in den nächsten Wochen wieder unterwegs Wer mich mal gerne persönlich kennenlernen
möchte, gerne bei einem der folgenden Termine:
|
13.03.2008
|
UG Karlsruhe |
Vortrag zum Thema "Qualitätsmanagement mit VSTS und TFS - für Entwickler!" |
|
18.03.2008 |
UG München |
Vortrag zum Thema "Qualitätsmanagement mit VSTS und TFS - für Entwickler!" |
|
|
|
Dieser Vortrag ist auf einen späteren Termin verschoben. Neuer
Termin wird noch bekanntgegeben |
|
10.04.2008 |
UG Braunschweig |
Vortrag zum Thema "Qualitätsmanagement mit VSTS und TFS - für Entwickler!" |
|
11.04.2008 |
AfterLaunch Köln |
Doppelsession zum Thema "Team Foundation Server in der Praxis" |
|
24.04.2008 |
TeamConf München |
Vortrag zum Thema "Programmierung mit dem TFS SDK - Hierarchische Workitems im TFS
2008" |
|
29.04.2008 |
artiso Innovationsdialog |
Innovationsdialog zum Thema "SOA in der Praxis" |
|
30.04.2008 |
UG Stuttgart |
Vortrag zum Thema "Qualitätsmanagement mit VSTS und TFS - für Entwickler!" |
|
27.05.2008 |
artiso Innovationsdialog |
Innovationsdialog zum Thema "Windows, Web, WCF - Oberflächentechnologien heute und
in Zukunft" |
|
26.06.2008 |
artiso Innovationsdialog |
Innovationsdialog zum Thema "Software-Architektur - das Fundament jeder Anwendung" |
Rechnerkonfiguration
12.03.2008 20:06:17
|
Thomas Schissler
Bei der Neuinstallation eines Entwicklungsrechners dauert es immer ewig, bis man sich
die ganzen nützlichen Helferlein zusammengesucht hat, die man im Laufe der Zeit zu
schätzen gelernt hat. Deshalb habe ich mir gedacht, ich schreibe mir mal eine Liste,
die ich dann immer wieder ergänzen kann. Und vielleicht ist für den einen oder anderen
da auch noch was interessantes dabei. Also so könnte ein Entwicklungsrechner aussehen:
Betriebsystem / Standardanwendungen:
-
Windows Vista Ultimate
-
Office 2007
-
SQL-Server 2005 Express
-
SQL-Server 2005 Management Studio
Entwicklungsumgebung:
Tools
Stand 12.03.2008
To be continued...
Power Commands für Visual Studio 2008
12.03.2008 20:01:56
|
Thomas Schissler
Richtig Zoomen in DeepZoom
12.03.2008 15:18:00
|
Mario Meir-Huber
Nachdem ich die ersten Hindernisse von DeepZoom überstanden habe dachte ich mir ich werde es mal allen Lesern dieses Blogs mitteilen wie man richtig Zoomed in Silverlight. Hierfür ist lediglich ein Multiscale-Image notwendig, welches ein DeepZoom Image enthält. Dieses wird z.B. mit Deep Zoom Composer erstellt.
Des weiteren ist es noch wichtig, das die Dateien, welche für Deep Zoom verwendet werden sich im ClientBin Verzeichnis befinden (sonst gibt's ne Böse Runtime Exception)
Nun gehe ich mal davon aus das ein "+" und ein "-" auf der Tastatur für's zoomen verwendet wird. Hierfür brauchen wir lediglich einen KeyDown-Event auf der Seite.
Das MultiScaleImage Objekt enthält bereits einige nette Funktionen. So können wir mit ZoomAboutLogicalPoint sehr einfach Zoomen. Diese Funktion benötigt 3 Parameter:
- Zoomfaktor (1.0 ist 100% - es ändert sich also nichts; 2.0 würde bedeuten das es 2x so groß wird, ...)
- X Position (Position über welche gezoomed wird - X)
- Y Position (Position über welche gezoomed wird - Y)
Die 2 Positionen sind jeweils von 0.0 bis 1.0 - geben also einen Prozentsatz des MultiScaleImage-Objekts an. Um die korrekte Position zu erfragen müssen wir vorerst die Mausposition abfragen (am besten im MouseMove in eine Var. vom Typ Point geben). Danach müssen wir die Mausposition in einem Wert zwischen 0.0 und 1.0 umrechnen - entweder anhand der Page oder anhand des MultiScaleImage-Objekts, sollte dies nicht der Page-Größe entsprechen).
Die nun errechnete Position geben wir als X und Y an die ZoomAboutLogicalPoint-Funktion weiter. Hierfür ist jedoch noch eine weitere Berechnung notwendig: Da das Image ja größer/kleiner wird, ist man nicht zwangsweise in einem Bereich zwischen 0 und 1. Dies würde dazu führen das man immer weiter oben zoomed. Um dies zu korrigieren gibt es die "ElementToLogicalPoint" Funktion des MultiScaleImage-Objekts.
Das ganze sieht dann in etwa so aus:
void Page_KeyDown(object sender, KeyEventArgs e)
{
double xpos = 1.0 / this.Width * zoomPosition.X;
double ypos = 1.0 / this.Width * zoomPosition.Y;
if (e.Key == Key.Add)
{
this.deepZoomObject.ZoomAboutLogicalPoint(1.1, deepZoomObject.ElementToLogicalPoint(zoomPosition).X, deepZoomObject.ElementToLogicalPoint(zoomPosition).Y);
}
if (e.Key == Key.Subtract)
{
this.deepZoomObject.ZoomAboutLogicalPoint(0.9, deepZoomObject.ElementToLogicalPoint(zoomPosition).X, deepZoomObject.ElementToLogicalPoint(zoomPosition).Y);
}
}
Anmerkung: zoomPosition wird in MouseMove gesetzt.
Morgen werde ich dann über DeepZoom Drag&Drop berichten.
Silverlight 2 : Deep Zoom & Developer Referenz
11.03.2008 21:45:00
|
Mario Meir-Huber
Eines der neuen Features von Silverlight 2.0 Beta 1 ist Deep Zoom. Dies stellt die Möglichkeit dar, sehr große Bilder zu skalieren und zu Zoomen. Das ganze funktioniert über ein MultiScaleImage-Objekt.
Im Web gibt es bereits einige äußerst interessante Beispiele, eines davon ist die Memorabilia des Hard Rock Café:
http://memorabilia.hardrock.com/
Weiters sehr interessant ist die Developer Referenz: Auch diese wurde mit einem MultiScaleImage realisiert.
http://joestegman.members.winisp.net/DeepZoom/
Wie inkrementiere ich meine Assembly Versionen automatisch mit TFS2008 ?
11.03.2008 17:36:16
|
Christian Binder
Letztes Jahr hatte ich dieses Thema für TFS2005 hier behandelt.
Mit TFS2008 hat sich aber in MSBuild einiges geändert, so dass man kleinere Änderungen vornehmen muss, um den Pattern auch mit TFS 2008 nativ verwenden zu können.
Hintergrund ist, dass die ColumnName class deprecated wurde, welche das von mir verwendete Field BuildNumber bereitgestellt hat:
[ObsoleteAttribute("This class has been deprecated. Please remove all references.")]
public static class ColumnName
Im TFSBuild.proj muss man den GetBuildPropertiesTask verwenden, um an die BuildNumber zu kommen.
Hier ein Snip mit den nötigen Änderungen, die das TFSBuild.proj File aus dem oben referenzierten Eintrag ergänzen:
<Target Name="CheckSettingsForEndToEndIteration">
<!--for 2008 use the GetBuildProperties Task to get the BuildNumber -->
<GetBuildProperties TeamFoundationServerUrl="$(TeamFoundationServerUrl)" BuildUri="$(BuildUri)">
<Output TaskParameter="BuildNumber" PropertyName="BuildNumber"></Output>
</GetBuildProperties>
<!-- extract the BuildRevision -->
<ExtractRevisionTask BuildNumber="$(BuildNumber)">
<Output TaskParameter="BuildRevision" PropertyName="BuildRevision" />
</ExtractRevisionTask>
<!-- update the AssemblyInfo Props -->
<CreateProperty Value="$(BuildRevision)">
<Output TaskParameter="Value" PropertyName="AssemblyRevision"/>
</CreateProperty>
<CreateProperty Value="$(BuildRevision)">
<Output TaskParameter="Value" PropertyName="AssemblyFileRevision"/>
</CreateProperty>
<!-- just needed if you populate the AssemblyDescription too like in the sample -->
<CreateProperty Value="$(BuildNumber)">
<Output TaskParameter="Value" PropertyName="AssemblyDescription"/>
</CreateProperty>
</Target>
Das wars damit funktioniert es auch mit TFS2008.
Viel Spass
Chris
Visual Basic contra C# in der Office Entwicklung
10.03.2008 18:47:00
|
Mario Meir-Huber
Gerade eben schreibe ich an einer kleinen Demo-Applikation, welche die Visual Studio Tools for Office 3.0 vorstellen soll. Dabei bin ich auf ein (in VB) kleines Beispiel in der MSDN Library gestoßen, welches die Stärke von Visual Basic in der Office Entwicklung klar aufzeigt. Das Problem von C# ist nämlich, das optionale Parameter nicht vorhanden sind.
Das Beispiel führt eine Rechtschreibkontrolle durch. Dabei benötigt man in Visual Basic ca. 5 Zeilen. In C# wird das mit 12 optionalen Parametern, welche jeweils mit "ref missing" angegeben wird doch ziemlich umfangreich.
Das ganze kann man am unteren Ende des Artikels in der MSDN nachlesen:
http://msdn2.microsoft.com/de-de/library/ms178794.aspx
Anmerkung:
bin stark für C#. VSTO Entwickle ich jedoch mit Visual Basic. Für viele andere Dinge verwende ich auch C#
Visual Basic: Endlich richtig Casten
06.03.2008 13:17:49
|
Jan-Cornelius Molnar
In diesem Artikel werden VB Funktionen wie CType, DirectCast, CInt, CStr, ... betrachtet.
Ist Option Strict aktiviert, fordert der Visual Basic Compiler, dass man beim Zugriff auf Funktionen und Eigenschaften eines Objekts den Datentyp angibt.
Beispiel 1
1 Dim person1 As Person
2 person1 = New Person
3 Console.WriteLine(person1.Name) ' funktioniert
4 Dim person2 As Object
5 person2 = New Person
6 Console.WriteLine(person2.Name) ' Compilerfehler, da Name keine Eigenschaft von Object ist.
In diesem Beispiel müsste man zuerst das Objekt person2 in den Typ Person casten.
Was ist ein Cast?
Bei einem Cast eines Objekts o in den Typ T, teilt man dem Compiler mit, dass er das Objekt o nun als eine Instanz des Typs T betrachten soll.
Beispiel 2
1 Dim o As Object
2 o = New Person
3 ' o ist vom Typ Person, also kann man dies dem Compiler mitteilen
4 Dim p As Person
5 p = DirectCast(o, Person)
Hier wurde dem Compiler mitgeteilt, das Objekt o als Instanz des Typs Person zu betrachten. Nun kann man auf die Eigenschaften und Funktionen, die Person bereitstellt, zugreifen.
Beim Casten bleiben die zugrundeliegenden Daten unverändert, man ändert nur die "Sichtweise".
VBs DirectCast ist ein "pures" Casting, es findet also keine Umwandlung statt, und damit ist es equivalent mit dem C# Cast.
VB
Dim p As Person = DirectCast(o, Person)
C#
1 Person p = (Person)o;
Was ist eine Conversion?
Unter VB steht neben DirectCast noch das Schlüsselwort CType zur Verfügung. Dieses Schlüsselwort kann neben "purem" Casting auch noch Conversions also Umwandlungen durchführen.
Beispiel 3
1 Dim o As Object
2 o = "12"
3 Dim i As Integer
4 i = CType(o, Integer)
In diesem Beispiel wird der Variable o der Wert "12" zugewiesen, somit ist sie vom Typ String. Eine Umwandlung mit DirectCast zum Typ Integer würde einen Fehler erzeugen, da der zugrundeliegende Datentyp nicht Integer sonder String ist und somit noch eine Umwandlung erforderlich wäre.
CType wandelt also die zugrundeliegenden Daten (hier vom Typ String in Integer).
Alternativ zu CType stellt Visual Basic noch spezielle Konvertierungsschlüsselwörter wie CStr, CInt, CDbl, CDate, etc. (Im Folgenden C* genannt) zur Verfügung, die für die Umwandlung in die entsprechenden Datentypen zur Verfügung stehen. Diese sind kürzer als die CType Notation und sparen somit Tipparbeit.
Beispiel 4
1 Dim o As Object
2 o = "12"
3 Dim i As Integer
4 i = CInt(o)
Beim Umwandeln von primitiven Datentypen wie Strings, Integers, etc. werden sowohl CType als auch C* vom Compiler in Aufrufe von Microsoft.VisualBasic.Conversion umgewandelt.
Ein Aufruf von CType(o, String) bzw. CStr wird vom Compiler in Microsoft.VisualBasic.Conversions.Str(o) umgewandelt.
Neben den VB Spezifischen Umwandlungen stellt das .NET Framework mit der Convert Klasse eine für alle .NET Sprachen einheitliche Möglichkeit zur Verfügung Daten umzuwandeln.
Beispiel 4
1 Dim o As Object
2 o = "12"
3 Dim i As Integer
4 i = Convert.ToInt32(o)
Performancebetrachtung
Die Visual Studio Intellisense empfiehlt stets eine Umwandlung mittels CType oder C* ist dann DirectCast vollkommen unnötig?
Hier gilt es zwei Fälle zu unterschieden:
- Typen, die nicht IConvertible implementieren (idR. Refrenztypen: Controls, Forms, selbst definierte Klassen, Interfaces, etc.)
In Beispiel 1 wurde eine Variable vom Typ Object, die eine Instanz des Person Typs enthält, gecastet. Da es sich hier um einen Referenz handelt und keine Konvertierung möglich ist, wird CType vom Compiler als DirectCast übersetzt. Es macht hier also keinen Unterschied CType oder DirectCast zu nehmen.
- Typen, die IConvertible implementieren (idR. Datentypen: Integer, Double, Date, ... aber auch String)
Hier macht es einen deutlichen Unterschied ob man CType, C*, DirectCast oder Convert verwendet.
Um Aussage etwas mit Zahlen zu unterlegen habe ich einen kleinen Benchmark geschrieben, der die Dauer in Millisekunden angibt, die es auf meinem System benötigt hat die gewünschte Operation 100.000.000 mal durchzuführen.
Für mich ergibt sich daraus
- Wann immer möglich DirectCast verwenden, da es bis zu 10 mal schneller ist als CType.
- Ist eine Umwandlung des zugrundeliegenden Werts notwendig, dann zeigen die Methoden der .NET Convert Klasse deutlich bessere Performance als die Conversion Methoden von Visual Basic, weshalb man CInt(o), etc. durch Convert.ToInt32(o), etc. ersetzten sollte.
Ausnahme bilden hier CStr und CDate, die nicht in VisualBasic.Conversion vertreten sind, sondern direkt Methoden des Frameworks aufrufen.
- Stellen die Datentypen also eigene Umwandlungsmethoden zur Verfügung wie Integer.Parse bzw. Object.ToString, dann sind diese zu empfehlen.
Ergebnis
Dieser Artikel hat gezeigt, dass die Empfehlung der Visual Studio Intellisense bequem ist und Schreibarbeit spart, jedoch auch Performanceeinbußen mit sich bringt. Der tatsächliche Verlust ist zwar von Anwendung zu Anwendung verschieden aber in einigen Fallen macht er sich sogar mit Faktor 10 bemerkbar.
Schade ist, dass die Implementierung der Visual Basic Conversion doch deutlich langsamer ist als die des .NET Frameworks. Grund dafür ist wahrscheinlich die Abwärtskompatibilität zu VB6 ...
Ich werde mich in Zukunft an DirectCast und Convert halten, was auch den Vorteil hat, dass C#-ler meinen Code leichter lesen können.
Source Code
Den verwendeten Source Code habe ich in diesem Beispielprojekt zusammengefasst.
http://www.dev-jc-vb.de/dev-jc-vb/blog/images/VisualBasicEndlichrichtigCasten_CF01/ConversionPerformance.zip
Mix08: Silverlight 2.0 Beta steht in den Startlöchern
04.03.2008 22:23:00
|
Mario Meir-Huber