Microsoft TechTalk zu Besuch bei "Bonn-to-Code.Net"
31.10.2007 18:33:00
|
Roland Weigelt
Am 20.11. findet an Stelle des üblichen User-Treffens der Bonner .NET User Group ein Microsoft TechTalk mit dem Titel “Übersicht zum Expression Studio” in den Räumen der Comma Soft AG statt. Anders als sonst beginnt die Veranstaltung bereits um 18:00, auch ist dieses Mal eine (kostenlose) Anmeldung erforderlich.
Anmeldung und weitere Infos bei Microsoft, eine ausführliche Beschreibung der Anfahrt gibt es auf der Website von Bonn-to-Code.Net.
Also: Anmelden nicht vergessen!
Probleme mit Intellisense-Support für Javascript in VS2008
29.10.2007 17:17:18
|
Thomas Schissler
Eines der neuen coolen Features in VS2008 ist der Intellisense-Support und das einfärben
für Javascript-Code. Das hat bei mir aber nicht funktioniert. Das Problem liegt daran,
dass bei der Installation zwei Registry-keys nicht korrekt gesetzt werden.
Setzt man folgende Registry-Keys korrekt dann funktioniert das Intellisense einwandfrei:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\CLSID\{014E9A41-54E5-44ED-B15E-EFFA8758BFFC}]
"CodeBase"=file:///C:\\Program Files\\Microsoft Visual Studio 9.0\\Common7\\IDE\\Microsoft.JScript.AuthoringServices.dll
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\CLSID\{014E9A41-54E5-44ED-B15E-EFFA8758BFFC}\InprocServer32\9.0.0.0]
"CodeBase"=file:///C:\\Program Files\\Microsoft Visual Studio 9.0\\Common7\\IDE\\Microsoft.JScript.AuthoringServices.dll
Nähere Infos findet man hier.
Goodbye Aachen, Hello Hamburg
29.10.2007 12:02:00
|
Thomas Freudenberg
After more than 8 years I´ll leave my current employer Cycos by the end of this year. Starting 1/1/08 I'll work as a Senior Software Developer at Proximity (international website.)
Cycos is my first employer, I started here right after university in 1999. Originally I didn't plan to stay that long here but 5 years at maximum. However, because the work was so diversified and the working atmosphere so prolific, I stayed some years longer.
E.g. I was delegated to Munich and San Jose (CA) for several month each, and they paid me the attendances and expenses for both PDC´03 and ´05 in LA. In other words, I can´t accuse myself of being inflexible or inmobil. And it was always fun working at Cycos. I´ll be contended if the working atmosphere at my new job is half as prolific as I got to know it in the past.
However, after 8 years it´s time for a change. Most of my time at Cycos I wrote proprietary software, mainly clients for computer telephony integration. In contrast, at Proximity I will leverage Microsoft products such as MOSS and BizTalk, i.e. areas I don´t have a clue about where I can gain experience. But don´t get me wrong, I´m really looking forward for the new job.
And I´m not only changing the employer, but the town as well. I´ll move to Hamburg, which is 500 km away from Würselen/Aachen (for my American friends: that´s about 310 miles). Therefore the search of a new domicile has my highest priority at the moment. I have 18 paid leave days left, and I want to complete my relocation this year. So this blog will stay quite silent the next few weeks. But stay tuned, I´ll keep you informed.

Undelete mit TFS Source Control
25.10.2007 18:09:17
|
Thomas Schissler
Wenn man eine Datei löscht, die in der Quellcode-Verwaltung eingecheckt war, kann
man diese leicht aus der Quellcode-Verwaltung wiederherstellen. Dazu muss man aber
zuerst eine kleine Einstellung vornehmen. Unter Tools / Options / Source Control /
Visual Studio Team Foundation Server kann man die Option "Show deleted items in the
Source Control Explorer" aktivieren.
Dann werden im Source Control Explorer gelöschte Elemente angezeugt, die man einfach
"undeleten" kann.
WCF Service-Manager
24.10.2007 11:11:09
|
Thomas Schissler
Wer mal etwas mehr mit WCF programmiert hat, wird feststellen, dass es recht müßig
ist, für jeden Service einen Host zu implementieren. Deshalb habe ich zusammen mit
meinem Kollegen Tobi einen WCF Service-Managerr entwickelt. Dieser Servicemanager
wird auf dem Application-Server als Windows-Dienst ausgeführt und ist in der Lage
Services die in DLLs bereitgestellt werden dynamisch zu laden und auszuführen. Zur
Steuerung dient ein Client der natürlich per WCF mit dem Service-Manager kommuniziert.
Damit kann auch eine größere Zahl von Services auf einem Application-Server effizient
verwaltet werden.
Der Service-Manager kann inkl. einer kleinen Doku kostenlos heruntergeladen und verwendet
werden. Über ein Feedback würde ich mich freuen.
artisoServiceManager.zip
(5,94 MB) Version 0.9.0
BE MonthCalendar
21.10.2007 07:31:04
|
Boas Enkler
Die BE Component Sammlung wurde um ein weiteres Control vervollständigt.
Absofort gibt es den voll customizeable BE Month Calendar. Dieser ist ein pure .NET
2.0 Custom Control und bietet die Möglichkeit praktisch jedes UIElement in seiner
Erscheinung anpassen zu können. Mehr Screenshots und Beispiele folgen demnächst.
Die Formatierung der Datumsangaben orientiert sich im standard an der aktuellen Culture
ist aber über ein Property überschreibbar
Als nächster Schrit sind hier die Anzeige der Kalenderwochengeplant.
Feedback & Featurewünsche Welcome!

Neue Add-Methode bei Dictionaries
17.10.2007 18:13:36
|
Thomas Schissler
Preisfrage: Was passiert bei folgendem Code:
Dictionary<int, string>
Names = new Dictionary<int, string>
{ { 1, "Thomas" }, { 2, "Chris" }
}; Names[5] = "Luka";
Ich hätte erwartet, dass der eine KeyNotFoundException wirft. Tut er aber nicht. Statt
dessen wird einfach ein neues Element dem Dictionary hinzugefügt mit dem Key 5 und
dem Value "Luka". Ob man das verwenden sollte sei mal dahingestellt, aber zumindest
gut zu wissen.
Mit LINQ den kleinsten Key in einem Dictionary abfragen
17.10.2007 11:25:48
|
Thomas Schissler
Möchte man den kleinesten Key aus einem Dictionary abfragen, dann kann man das jetzt
mit Hilfe von LINQ ganz einfach tun. Das Dictionary-Objekt ist in C#3.0 mit einer
ensprechenden Extension versehen wordurch das Ganze so einfach ist, wie man sich das
immer gewünscht hat.
Dictionary<int, double>
ListObject = new Dictionary<int,double>
{ {2004, 1.5}, {2005, 2.7}, {2006, 3.8} }; int minYear
= ListObject.Min(l => l.Key);
Buchbeschreibung: Microsoft ASP.NET AJAX-Programmierung / Dino Esposito
17.10.2007 10:48:44
|
Thomas Schissler
Ich habe mich entschieden, von Zeit zu Zeit Kurzbeschreibungen zu Büchern, die ich
aktuell lese zu posten. Vielleicht erhält der eine oder andere dadurch die Anregung,
sich mit einem Buch näher zu beschäftigen. Ich poste hier meine ganz private Meinung
und bekomme auch keine Provision dafür, wenn jemand das Buch kauft. Ich werde so objektiv
wie möglich berichten, wie ich die Bücher einschätze.
 |
Den Anfang möchte ich mit einem Buch von Dino Esposito machen. In "ASP.Net AJAX Programmierung
beschreibt Dino fundiert aber dennoch leicht verständlich, wie AJAX funktioniert,
wie ASP.NET AJAX aufgebaut ist und wie das ASP.NET AJAX Component Toolkit eingesetzt
werden kann.
Das Buch setzt entsprechende Kenntnisse in der Programmierung von ASP.NET und auch
HTML und Javascript voraus und richtet sich damit an Entwickler die bisher bereits
Web-Anwendungen mit ASP.NET entwickelt haben. Es bietet eine gute Grundlage für die
Programmierung von AJAX Anwendungen und vermittelt auch die Hintergründe zur Technologie,
so dass man bestimmte Probleme und Effekte besser verstehen kann. Dino bietet jede
Menge Tipps, wie man mit ASP.NET AJAX seine Anwendungen aufbauen sollte und welche
Fehler man vermeiden sollte. Damit ist das Buch eine wertvolle Unterstützung für alle
die ihre ASP.NET Anwendungen mit Hilfe von AJAX optimieren wollen.
Die Beispiele sind nicht übermäßig ausführlich aber präzise beschrieben. Die oben
Beschriebenen Grundkenntnisse vorausgesetzt kann man schnell folgen und vieles davon
auch gleich in der Praxis einsetzen. Der Stil des Buches ist angenehm und gut lesbar,
so dass ich dieses Buch auf jeden Fall empfehlen kann. |
Microsoft
ASP.NET AJAX-Programmierung von Dino Esposito erschienen bei Microsoft-Press
Dictionaries in C#3.0 initialisieren
17.10.2007 10:29:20
|
Thomas Schissler
Vor kurzem hatte ich in einem Post beschrieben,
wie man mit C#3.0 Listen effizient initialisieren kann. Das Ganze funktioniert übrigens
auch mit Dictionaries. Das siehtr dann einfach so aus:
productVersion.Sales = new Dictionary<int,double>
{ {2004, 1.5}, {2005, 2.7}, {2006, 3.8} };
Extender Provider
13.10.2007 13:31:04
|
Boas Enkler
Was sind Extender Provider ?
Eigentlich ist fast jeder Softwareentwickler schon einmal mit Extender Provider in
Berührung gekommen. Beispielsweise in Form des Errorproviders, ToolTips oder
HilfeProviders.
All diese Komponenten haben eins gemeinsam: Sie erweitern die Funktion eines Controls
von Außen, ohne dass das Control selbst dies mitbekommen.
Zum Beispiel der ToolTip: Sobald sich ein ToolTip auf der Form befindet (hier: MyToolTip)
bekommen alle Controls ein Property „ToolTip auf MyToolTip“. Der Text der
in diesem Property steht wird dann bei einem ToolTip angezeigt.
Der ToolTip Extender überwacht / reagiert nun auf Events aller Controls die
„ToolTip fähig“ sind und zeichnet in Abhängigkeit von diesen Events das ToolTip Window.
Somit muss das Control nichts von der ToolTip Komponente wissen.
Wie implementiere ich einen eigenen Extender Provider?
Als Beispiel implementieren wir einen Extender Provider, welcher dafür sorgt, dass
wenn ein Control verlassen wird, eine MessageBox erscheint.
Zunächst erstellen wir uns eine eigene neue Komponente (Projekt / Namespace =>
Hinzüfgen=> Komponente) .
1.Interface
Um einen eigenen Extender Provider zu implementieren, benötigt man eine Klasse / Komponente
die das IExtenderProvider Interface erfüllt.
Im Code der Komponente definieren wir nun, dass diese Klasse das IExtenderProvider Interface
implementieren soll:
…
public partial class MesssageBoxProvider : Component,IExtenderProvider
{
…
Die IExtenderProvider Schnittstelle
definiert genau eine Methode (CanExtend). Diese Methode wird für jedes Objekt ausgeführt
und dient dazu, festzustellen ob dieses Objekt durch den Extender erweitert werden
soll. Liefert die Methode für ein Objekt "true" zurück, so wird dieses Control von
dem Extender erweitert.
Wir
legen diese Methode nun so aus, dass jedes Control von
unserem Extender erweitert wird. Die Implementierung der Schnittstellen Methode sieht
dann folgendermaßen aus:
public bool CanExtend(object extendee)
{
bool isValid
= false;
if (extendee is Control)
{
isValid
= true;
}
return isValid;
}
2. Virtuelle Properties
Nun
benötigen wir noch ein Property, welches an jeder Zielkomponente verfügbar sein soll.
Dieses Property soll den Text enthalten, der später in der MessageBox beim verlassen
des Controls auftauchen soll.
Hierfür legen wir zunächst ein ProvideProperty Attribut
in unserer Provider Klasse an. Dem Attribut gibt man den Namen des Propertys an und
den Typ für den dieses Property gilt. Also bei welcher Art von Objekt dieses Property
virtuell generiert werden soll. Unser Property soll für alle Windows Forms Controls
gültig sein. Deswegen sieht das Attribut wie folgt aus:
[ProvideProperty("MessageBoxTag",typeof(Control))]
Dieses Property erscheint zwar im Propertygrid bei den einzelnen Controls, allerdings
wird den Controls nichts hinzugefügt. Statt dessen werden für alle Controls, die vom
Extender betroffen sind, die Werte im Extender selbst verarbeitet.
Aus diesem Grund muss für jedes „virtuelle“ Property eine Get- und eine SetMethode
implementiert werden. Diese müssen genauso heißen wie das Property, nur dass man ein
Set bzw. ein Get vorstellt. Bei beiden bekommt
man dasjenige Objekt als Parameter, für das ein Wert gesetzt oder ausgelesen werden
soll. Wir merken uns die Werte für jedes Control in einem Dictionary und liefern dementsprechen
in der GetMethode die Werte wieder zurück.
Die Implementierung sieht dann so aus:
/// <summary>
/// Tag
wird für ein Control gesetzt
/// </summary>
/// <param
name="sender">aufrufendes Control für das der
Wert gesetzt werden solll</param>
/// <param
name="value">Wert der für
das Control gesetzt werden soll</param>
public void SetMessageBoxTag(object sender, string value)
{
Control curCtl
= sender as Control;
if (curCtl
!= null)
{
if (myValues.ContainsKey(curCtl))
{
myValues[curCtl]
= value;
}
else
{
//Das
Control wurde bis jetzt noch nicht hinzugefügt
myValues.Add(curCtl,
value);
}
}
}
/// <summary>
/// Ruft
den Tag für ein ein Control ab
/// </summary>
/// <param
name="sender">Control das anfragt</param>
/// <returns>Hinterlegter
Messagebox tag</returns>
public string GetMessageBoxTag(object sender)
{
string result
= null;
Control curCtl
= sender as Control;
if (curCtl
!= null)
{
if (myValues.ContainsKey(curCtl))
{
result
= myValues[curCtl];
}
}
return result;
}
Bis hier hin haben wir nun einen Extender Provider der Controls dynamisch um ein Property
erweitert. Allerdings gibt es noch keine Funktion dahinter (Wir wollen ja eine MessageBox
beim Verlassen des Controls anzeigen lassen).
Um SetMessageBoxTag
bekommen wir mit, sobald für ein Control zum ersten Mal ein Wert gesetzt wird. Deswegen
binden wir uns dort das Leave Event des Controls(Achtung: Dieses Event sollte
im Dispose des Extenders wieder enfernt werden!)
Der erweiterte Code der Methode SetMessageBoxTag im Extender sieht nun so aus:
public void SetMessageBoxTag(object sender, string value)
{
Control curCtl
= sender as Control;
if (curCtl
!= null)
{
if (myValues.ContainsKey(curCtl))
{
myValues[curCtl]
= value;
}
else
{
//Das
Control wurde bis jetzt noch nicht hinzugefügt => Wir fügen es ein und binden uns
die gewünschten Events
myValues.Add(curCtl,
value);
curCtl.Leave
+= new EventHandler(curCtl_Leave);
}
}
}
Im leave
des Controls können wir nun reagieren, den Tag auslesen und die MessageBox hochbringen:
/// <summary>
/// Control
wurde verlassen => die Messagebox anzeigen
/// </summary>
/// <param
name="sender"></param>
/// <param
name="e"></param>
void curCtl_Leave(object sender, EventArgs e)
{
Control curCtl
= sender as Control;
if (curCtl
!= null)
{
//Ermittelt
den Wert für unser Property, der in der MessageBox angezeigt werden soll
string text
= myValues[curCtl];
//Wenn
ein Text definiert ist...
if (!string.IsNullOrEmpty(text)
&& text.Trim() != "")
{
//...
Zeigen wir ihn an
MessageBox.Show(text);
}
}
}
Links
http://www.microsoft.com/germany/msdn/library/visualtools/DieSchnittstelleIExtenderProvider.mspx?mfr=true
http://msdn.microsoft.com/library/deu/default.asp?url=/library/DEU/cpguide/html/cpconImplementingExtenderProvider.asp
http://msdn2.microsoft.com/de-de/library/envdte.iextenderprovider(VS.80).aspx
ExtenderSample.zip
(72,53 KB)
Xtopia vorbei - die nächsten Termine
13.10.2007 01:46:24
|
Mathias Raacke
Die Xtopia war sehr interessant. Ich habe viele alte Bekannte getroffen und auch ein
paar neue Leute kennen gelernt. Und gute Vorträge gab es natürlich auch noch :).
Gerade eben habe ich schon die Tickets für den Flug zur nächsten Konferenz gebucht.
Im November bin ich auf der TechEd Developers in Barcelona. Ausnahmsweise ist die
Lufthansa mal die billigste Reisemöglichkeit. Allerdings fliegt die Lufthansa über
Frankfurt statt wie Air Berlin über Mallorca. Schade, dieses Jahr also kein Wochenendurlaub
auf dem Rückflug.
Auf der TechEd werde ich wie auch auf der Xtopia im "Ask the Experts" Bereich arbeiten.
Als ATE werde ich deutlich weniger arbeiten müssen als bei der TechEd in Orlando,
wo ich als Technical Learning Guide (TLG) in den Hands on Labs gearbeitet habe. In
Orlando blieb nur noch Zeit für einen einzigen Vortrag (und viele Interessante Gespräche),
in Barcelona sollten es hoffentlich ein paar Vorträge mehr werden die ich mir ansehen
kann. Ich bin auch nicht der einzige Paderborner ATE in Barcelona - Henning wird
ebenfalls als ATE auf der TechEd arbeiten. Hoffentlich gibt es dieses Jahr wieder
eine große Party. Vor 2 Jahren in Amsterdam gab's ein Konzert der Scissor Sisters,
in Orlando hatte Microsoft mal eben einen kompletten Freizeitpark gemietet. Ich habe
also hohe Erwartungen :).
Nach der TechEd wird es dann zumindest mal für ca. 3 Monate wieder etwas ruhiger.
Somit bleibt auch wieder mehr Zeit für's Studium.
Danach bin ich dann auf dem Visual Studio 2008 Launch Event in Frankfurt mit einem
Vortrag über CardSpace. Außerdem ist dann auch wieder VSone und BASTA!, allerdings
habe ich für die BASTA! noch keine Vorträge eingereicht und meine Vorschläge für die
VSone sind auch noch nicht fertig ausgearbeitet. Mal sehen ob mir ein interessantes
Thema einfällt, zumindest an mindestens einer der beiden Konferenzen würde ich ja
schon gerne wieder teilnehmen.
Auf dem Weg zur Xtopia
09.10.2007 18:56:02
|
Mathias Raacke
Am Mittwoch + Donnerstag bin ich in Berlin auf der Xtopia, der neuen Microsoft Konferenz
zu User Experience und Web Design. Ich arbeite dort als "Ask the Experts" (ATE), werde
also Fragen der Teilnehmer beantworten. Das gibt sicher wieder einige sehr interessante
Gespräche.
Im Moment sitze ich im Hauptbahnhof in Hannover und warte auf meinen Zug. Der hat
mal wieder 30 Minuten Verspätung. War ja klar, wo ich sowieso schon 30 Minuten Zeit
zum Umsteigen hatte. Aber inzwischen bin ich's ja gewohnt, deshalb fahre ich auch
schon heute Abend nach Berlin und nicht erst morgen früh, wo ich mit dieser Verspätung
schon zu spät zur Konferenz gekommen wäre.
Object Test Bench im Visual Studio
08.10.2007 14:23:09
|
Thomas Schissler
Ich hatte gerade ein kleines Problem mit der Object Test Bench. Die Object Test Bench
ermöglicht es, im Visual Studio Instanzen von Objekten zu erzeugen, auf denen man
dann direkt Methoden aufrufen kann, ohne die Anwendung zu starten. Dazu geht man in
den Class View oder den Class Designer, klickt die entsprechende Klasse mit der rechten
Maustaste an und ruft dann aus dem Kontext-Menü den Befehl "Create Instance" auf ...
Tja, wenn der Befehl denn da wäre. Bei mir war da nichts zu sehen. Nach einigem Versuchen
habe ich dann rausgefunden, dass dies wohl nur auf dem Projekt funktioniert, das als
Startprojekt ausgewählt wurde. Also habe ich meine Library als Startprojekt gekennzeichnet
und siehe da, es funktioniert.
Schade ist allerdings, dass Methoden, die generische Datentypen zurückliefern nicht
von der OTB unterstützt werden.
Weiterführende Informationen findet man hier: http://blogs.msdn.com/parthopdas/archive/2005/05/04/414704.aspx
XTOPIA 2007
08.10.2007 13:23:00
|
Thomas Freudenberg
Now Germany has its own Mix conference, though here Microsoft calls it Xtopia. It will cover Silverlight, WPF, the Expression suite, and much more. It will take place in Berlin from 10th to 12th of October (if you include the post-conference on Friday).
I'll go to Berlin tomorrow already, and stay until Saturday. My Hotel is the Quality Hotel & Suites Berlin City East. If you want to join me for a beer or two, drop me a line or call me at +49 (173) 285 21 81. Lars, I'm expecting your call.

CardSpace 3.5 funktioniert auch ohne SSL Zertifikat!
07.10.2007 00:04:09
|
Mathias Raacke
Ein Feature dass ich mir schon lange vom CardSpace Team gewünscht habe - CardSpace
ohne SSL Zertifikate. Mit .NET 3.5 und Windows Vista SP1 wird es möglich sein, CardSpace
auch auf Seiten ohne SSL Zertifikate zu nutzen. Damit wird CardSpace auch für die
breite Masse von privaten Webseiten und Blogs nutzbar werden, und nicht nur für kommerzielle
Seiten, für die die Kosten eines SSL Zertifikats unbedeutend sind.
Diese und weitere Neuerungen von CardSpace 3.5 wurden über das neue Blog
des CardSpace Teams angekündigt.
Ich habe mir daraufhin direkt mal eine Beta des SP1 für Vista installiert und CardSpace
Unterstützung in das Login zum Admin-Bereich der .NET
Camp Web Seite eingebaut. Ich habe dabei wie bereits auch für mein Blog wieder
die TokenProcessor.cs aus den CardSpace-Samples auf http://cardspace.netfx3.com verwendet.
Dabei war eine kleine Anpassung erforderlich. Bei SSL-basiertem CardSpace wird das
an die Web Seite übermittelte Token verschlüsselt, und muss somit von der TokenProcessor-Klasse
wieder entschlüsselt werden. Die TokenProcessor-Klasse sucht deshalb nach Informationen
über den verwendeten Verschlüsselungsalgorithmuss, und wirft eine Exception, wenn
diese nicht vorhanden sind:
//
Find the EncryptionMethod element, grab the Algorithm
if (!reader.ReadToDescendant(XmlEncryptionStrings.EncryptionMethod,
XmlEncryptionStrings.Namespace))
throw new ArgumentException("Cannot
find token EncryptedMethod.");
An dieser Stelle kann man einfach die Entschlüsselung überspringen, und das (ja bereits
unverschlüsselte) Token wieder zurück geben:
if (!reader.ReadToDescendant(XmlEncryptionStrings.EncryptionMethod,
XmlEncryptionStrings.Namespace))
{
return UnicodeEncoding.Default.GetBytes(xmlToken);
}
Da das SAML Token nicht verschlüsselt übertragen wird könnte ein Angreifer das Token
aufzeichnen und erneut an die Seite senden. Inwiefern die SAMLSecurityTokenAuthenticator-Klasse,
die von der TokenProcessor-Klasse zur Überprüfung des Tokens verwendet wird, so etwas
überprüft, habe ich mir noch nicht angesehen. Vibro geht
in seinem Blog kurz darauf ein - wenn die Gültigkeitsdauer des Tokens nicht zu
lang gewählt wird scheint dies wohl kein großes Problem zu sein. Jedenfalls ist CardSpace
auch ohne SSL noch deutlich sicherer als unverschlüsselt Übertragene Passwörter.
In der .NET Camp Web Seite funktioniert das CardSpace Login schon sehr gut, und ich
muss mir ein Kennwort weniger merken :)
Objekte und Listen in C# 3.0 initialisieren
06.10.2007 18:17:22
|
Thomas Schissler
Objekte und Listen lassen sich jetzt in C# 3.0 sehr schön initialisieren. War bisher
um ein relativ einfaches Objekt zu initialisieren sehr viel Code erforderlich, hat
sich das nun deutlich verkürzt:
Bisher:
List<cProduct> Products = new List<cProduct>();
cProduct Product = new cProduct(); Product.ID
= 1; Product.BusinessDevelopmentComment = "";
Product.MarketingComments = ""; Product.VersionDescriptions
= new List<cProductVersionDescription>();
Product.INNs = new List<cProductINNItem>();
cProductVersionDescription VersionDescription = new cProductVersionDescription();
VersionDescription.ID = 1; VersionDescription.LastPCMDate = DateTime.Now; VersionDescription.LastPCMDecision
= "Go"; VersionDescription.NPV = 689.54; VersionDescription.ProductID
= 1; VersionDescription.ProductVersionID = 1; VersionDescription.VersionName = "Version1";
Product.VersionDescriptions.Add(VersionDescription); cProductINNItem INN = new cProductINNItem();
INN.INN = 8; INN.Dosage = 1.5; INN.DosageUnit = 1; INN.Volume = 1; INN.Comment = "Test-Comment";
INN.INNOrder = 1; Product.INNs.Add(INN); INN = new cProductINNItem();
INN.INN = 2; INN.Dosage = 2.5; INN.DosageUnit = 2; INN.Volume = 2; INN.Comment = "Test-Comment2";
INN.INNOrder = 2; Product.INNs.Add(INN);
Neu mit C#3.0:
List<cProduct> Products = new List<cProduct>
{ new cProduct{ ID = 1, BusinessDevelopmentComment
= "", MarketingComments = "",
VersionDescriptions = new List<cProductVersionDescription>
{ new cProductVersionDescription{ ID=1, LastPCMDate=DateTime.Now,
LastPCMDecision="Go", NPV=689.54, ProductID=1,
ProductVersionID=1, VersionName="Version1"} },
INNs = new List<cProductINNItem> { new cProductINNItem{
INN=8, Dosage=1.5, DosageUnit=1, Volume=1, Comment="Test-Comment",
INNOrder=1}, new cProductINNItem{ INN=2, Dosage=2.5,
DosageUnit=2, Volume=2, Comment="Test-Comment2",
INNOrder=2} } } };
Bisher konnte man den Code noch etwas vereinfachen, indem man einen entsprechenden
Konstruktor für die Objekte erstellt hat, in dem die Initialisierungswerte übergeben
werden konnten. Hier bietet die neue Version aber den Vorteil, dass diese leichter
zu leesen ist, da die Parameter hier entsprechend bezeichnet sind. Beim Konstruktor
musste immer Intellisense zu Hilfe genommen werden um herauszufinden, um welchen Parameter
es sich handelt.
Debuggen von ASP.Net Anwendungen in VS2008 Beta2 mit Vista
06.10.2007 17:39:24
|
Thomas Schissler
Möchte man ASP.Net Anwendungen mit VS2008 debuggen, dann ist entscheidend, welchen
Servermode man in den Einstellungen für das Web-Projekt ausgewählt hat.
Mit dem Visual Studio Developer Server hat das bei mir auf anhieb funktioniert. Allerdings
mit dem IIs gab es Probleme. Hier habe ich zuerst diese NMeldung bekommen:
Unable to start debugging on the web server. Strong name validation failed.
Diesen Fehler kann man beheben indem man folgendes Procedere durchführt:
-
Visual Studio beenden!
-
Den "Visual Studio Command Prompt" mit "Run as Administrator" starten.
-
Dann folgenden Befehl ausführen: sn.exe -Vr "%ProgramFiles%\Microsoft Visual Studio
9.0\Common7\IDE\iisresolver.dll"
Damit sollte diese Meldung behoben sein. Dann kam aber bei mir der nächste Fehler:
Unable to start debugging on the web server. IIS does not list an application that
matches the launched URL.
Um diesen Fehler zu beseitigen muss man die Windows Authentification aktivieren. Dazu
geht man folgendermaßen vor:
-
Im Explorer auf "Computer" Rechtsklick und dann "Manage"
-
Den IIS Manager öffnen und die entsprechende Anwendung auswählen
-
"Authentication" unter IIS doppelklicken und dann "Windows Athentication" auf Enabled
setzen
Damit hat bei mir das Debuggen dann auch mit dem IIS funktioniert.
Microsoft veröffentlicht .NET Quellcode
03.10.2007 20:31:39
|
Mathias Raacke
Microsoft hat über das
Blog von Scott Guthrie angekündigt, große Teile des Quellcodes der .NET Klassenbibliotheken
zu veröffentlichen. Veröffentlicht werden der Quellcode der Base Class Library (System
Namespace, IO, Text, Collections, CodeDom, Regular Expressions, usw), ASP.NET, Windows
Forms und WPF. Später sollen auch weitere Teile veröffentlicht werden.
Der Quellcode wird über 2 Wege verfügbar sein:
1) Als Downloadpaket mit dem gesamten Quellcode
2) Über eine Integration in Visual Studio 2008
Besonders der 2. Punkt ist interessant: Über den Debugger wird es möglich sein, nicht
nur durch eigenen Code, sondern auch den der .NET Framework Klassenbibliotheken zu
debuggen. Der Code wird dann während des Debuggens von einem Webserver heruntergeladen.
Der Quellcode wird unter der Microsoft Reference License veröffentlicht. Diese erlaubt
das Betrachten des Quellcodes, er darf aber nicht kopiert, verändert oder weiter verteilt
werden.
Weitere Informationen und Screenshots der Visual Studio 2008 Integration gibt es bei Scott
Guthrie.