.
Anmeldung | Registrieren | Hilfe

.NET-Blogs Archiv Oktober 2007

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

Cycos 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.Proximity 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.

image

Dann werden im Source Control Explorer gelöschte Elemente angezeugt, die man einfach "undeleten" kann.

image

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.

image

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.

image 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.

Technorati tags: , , , ,

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 :)

Technorati tags: , ,

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.

image

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:

  1. Visual Studio beenden!
  2. Den "Visual Studio Command Prompt" mit "Run as Administrator" starten.
  3. 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:

  1. Im Explorer auf "Computer" Rechtsklick und dann "Manage"
  2. Den IIS Manager öffnen und die entsprechende Anwendung auswählen

    image
  3. "Authentication" unter IIS doppelklicken und dann "Windows Athentication" auf Enabled setzen

    image

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.

WPF Forum | ASP.NET Forum | ASP.NET MVC Forum | Silverlight Forum | Windows Phone 7 Forum | SharePoint Forum | Dotnet Jobs | Dotnet Termine | Developer Blogs | Dotnet News

Das Team | Regeln | Impressum