Wissenswertes über die neuen und aktualisierten Features in Visual Studio .NET 2003

Veröffentlicht: 29. Mrz 2003 | Aktualisiert: 22. Jun 2004
Von Carl Franklin

Wann immer ein Upgrade eines beliebten Tools veröffentlicht wird, werden Fragen zu dessen Kompatibilität, Versionierung und methodologischen Änderungen aufgeworfen. Die Veröffentlichung von Visual Studio .NET 2003 stellt hier keine Ausnahme dar. Entwickler werden mit Erleichterung hören, dass nur wenige Inkompatibilitätsänderungen implementiert wurden, und sich freuen, dass wichtige neue Features, wie Visual J#, hinzugefügt wurden. Diese und andere neue Features von .NET Framework 1.1 und Visual Studio .NET 2003, einschließlich Mobilunterstützung und verbessertes Debugging, werden hier erörtert.

In diesem Artikel wird vorausgesetzt, dass Sie mit Visual Studio .NET vertraut sind.

Auf dieser Seite

 Inkompatibilitätsänderungen
 Neue Sprache: Visual J# .NET 2003
 Unterstützung für Mobilgeräte
 Mobile Clientanwendungen
 Mobile Webanwendungen
 C++-Rundumerneuerung
 Neue Datenprovider für Oracle und ODBC
 IP Version 6
 Änderungen in Visual Studio .NET
 Schlussfolgerung:

Wenn man Entwickler fragt, was sie von Visual Studio® .NET 2003 und Microsoft® .NET Framework Version 1.1 halten, ist die Reaktion oft recht abweisend, und es wird das Fehlen bestimmter Features bemängelt, z.B. die Möglichkeit, im Debugger zu unterbrechen, zu bearbeiten und fortzufahren. Lassen Sie sich davon nicht entmutigen. Wenn Sie bisher glaubten, dass diese neue Version nichts Neues oder Wichtiges enthält, liegen Sie falsch. Es gibt eine Vielzahl aufregender neuer Features, und wenn Sie sich nicht kopfüber in diese neue Version stürzen möchten, können Sie es schrittweise angehen - Sie können nach der Installation von Visual Studio .NET 2003 weiterhin Visual Studio .NET 2002 ausführen.
Da Chris Sells die Kompatibilitätsprobleme und Windows® Forms-Features in seinem Artikel "Windows Forms: .NET Framework 1.1 Provides Expanded Namespace, Security, and Language Support For Your Projects" (in Englisch) bereits hervorragend erläutert hat, werde ich mich an dieser Stelle auf die anderen bemerkenswerten Änderungen und Features in .NET Framework Version 1.1 und Visual Studio® .NET 2003 konzentrieren. Zunächst beschäftige ich mich mit den wichtigsten Änderungen und komme anschließend zu den Einzelheiten.

Inkompatibilitätsänderungen

Die wesentlichen "Inkompatbilitätsänderungen" (das heißt Änderungen, die den vorhandenen Code beschädigen können) im Framework finden sich in den XML-Features. In System.Xml.Xsl.XslTransform ist jetzt für die Load- und Transform-Methoden ein XmlResolver-Argument erforderlich. Die einzigen anderen Inkompatibilitätsänderungen bestehen darin, dass die System.Environment.HasShutdownStarted-Eigenschaft jetzt den Wert Static hat und die System.Security.Cryptography.DSACryptoServiceProvider-Klasse jetzt versiegelt (bzw. in Visual Basic® .NET: NotInheritable) ist. Daneben gibt es noch sieben weitere Änderungen, die zu Codeinkompatibilität führen, diese befinden sich jedoch in den internen Bibliotheken iehost und iiehost. Die übrigen Änderungen haben keinerlei Auswirkungen auf Ihren Code. Daneben werden mehrere Versionen von .NET Framework unterstützt. Sie können Installationsprogramme erstellen, die auf eine bestimmte Version von .NET Framework mittels einer Startbedingung abzielen, die die korrekte Version überprüft und den Benutzer ggf. für das Downloaden von Redistributables zu einem entsprechenden Webpfad umleitet.

Neue Sprache: Visual J# .NET 2003

Eines der wohl wichtigsten Features von .NET Framework 1.1 ist die Unterstützung für Visual J#(tm) .NET 2003, eine verwaltete Version der Java-Sprache. Es ist zwar nicht die Java-Plattform, doch Java-Entwickler werden sich hier wie zu Hause fühlen. Visual J# .NET unterstützt zudem die meisten Features von Visual J++® 6.0, einschließlich Microsoft-Erweiterungen. In Kombination mit der Fähigkeit, einige Java-Binärdateien für die Ausführung in der CLR (Common Language Runtime) zu konvertieren, macht das Visual J# .NET zu einem handlichen Paket für Java-Entwickler.

Da Visual J# .NET einfach eine weitere auf die CLR abzielende Sprache ist, können Sie dieselben Arten von Anwendungen entwickeln wie C#- und Visual Basic .NET-Entwickler (Web Services, ASP.NET usw.). Sie können auch von den Sicherheits- und Weitergabevorteilen sowie den Vorteilen für den sprachübergreifenden Einsatz profitieren, die .NET Framework bietet.
Das Visual J# Binary Converter Tool transformiert Java-Bytecode in MSIL (Microsoft Intermediate Language). Beachten Sie jedoch, dass dies zwar in den meisten Java Development Kit (JDK) 1.1.4-Bibliotheken und -Anwendungen funktioniert, aber nicht in allen. Die bevorzugte Portierungsmethode ist die Neukomplierung des Java-Quellcodes als Visual J# .NET. Verwenden Sie dieses Tool jedoch nur als Notlösung.

Visual J# .NET ist für die Bereitstellung einer Bibliotheksklassenunterstützung konzipiert, die von ihrem Funktionsumfang her den meisten im Lieferumfang von Visual J++ 6.0 enthaltenen JDK 1.1.4-Paketen entspricht. Außerdem werden Klassen bereitgestellt, die im College Board Advanced Placement Curriculum for Computer Science (Informatiklehrplan für US-Colleges) angegeben sind. Visual J# .NET unterstützt auch die WFC (Windows Foundation Classes)-Bibliotheken und die folgenden com.ms.-Pakete: com.ms.lang, com.ms.dll, com.ms.com, com.ms.win32, com.ms.util und com.ms.jdbc.odbc.
Der Visual J# .NET-Compiler kompiliert Java-Quellcode nicht in Java-Bytecode, sondern stattdessen in MSIL. Visual J# .NET unterstützt keine Appletentwicklung, das Hosten von Applets in Browsern oder das Erstellen von Anwendungen, die auf einem virtuellen Javacomputer ausgeführt werden. Sie können jedoch Windows Forms-Steuerelemente erstellen, die in einem Browser auf einem Client, auf dem sowohl die .NET Framework 1.1 Runtime als auch das J# Redistributable Package 1.1 installiert ist, einwandfrei dargestellt werden können.

Visual J# .NET bietet ebenfalls keine Unterstützung für Java Native Interface (JNI), Raw Native Interface (RNI) und Remote Method Invocation (RMI). Abbildung 1 zeigt die Beziehungen zwischen Java-Binärdateien, Quellcode, dem JDK und .NET Framework.


vsnet_fig01.gif

Abbildung 1 Java-Binärdateien, Quellcode, JDK und CLR


Java-Binärdateien können in MSIL konvertiert werden, diese Vorgehensweise wird jedoch nicht empfohlen. Auch hier besteht die beste Vorgehensweise darin, Java-Quellcode in Visual J# .NET zu konvertieren, um reinen Visual J# .NET-Quellcode zu erhalten. Eine noch bessere Lösung besteht darin, die Unterstützung für die JDK-Bibliotheken komplett zu entfernen und direkt in das .NET Framework zu codieren. An dieser Stelle können Sie mit auf die CLR abzielendem Code fortfahren, ohne Legacybinärdateien oder die JDK-Bibliotheken beibehalten zu müssen. Sie werden feststellen, dass Visual J# .NET sowohl auf verwaltete JDK 1.1.4-Bibliotheken als auch auf das eigentliche .NET Framework abzielen kann.
Nun sollten wir einen Blick auf die Sprache werfen und sie mit C# vergleichen. Listing 1 zeigt eine einfache "Hello World"-Anwendung in C#, die in Visual Studio .NET 2003 entwickelt wurde. Listing 2 ist dasselbe Projekt in Visual J# .NET.


L1. Hello World in C#

using System; 
using System.Drawing; 
using System.Collections; 
using System.ComponentModel; 
using System.Windows.Forms; 
using System.Data; 
namespace HelloCS 
{ 
 /// <summary> 
 /// Summary description for Form1. 
 /// </summary> 
 public class Form1 : System.Windows.Forms.Form 
 { 
  private System.Windows.Forms.Button button1; 
  /// <summary> 
  /// Required designer variable. 
  /// </summary> 
  private System.ComponentModel.Container components = null; 
  public Form1() 
  { 
   // 
   // Required for Windows Form Designer support 
   // 
   InitializeComponent(); 
   // 
   // TODO: Add any constructor code after  
   // InitializeComponent call 
   // 
  } 
  /// <summary> 
  /// Clean up any resources being used. 
  /// </summary> 
  protected override void Dispose( bool disposing ) 
  { 
   if( disposing ) 
   { 
 if (components != null) 
 { 
  components.Dispose(); 
 } 
   } 
   base.Dispose( disposing ); 
  } 
  #region Windows Form Designer generated code 
  /// <summary> 
  /// Required method for Designer support—do not modify 
  /// the contents of this method with the code editor. 
  /// </summary> 
  private void InitializeComponent() 
  { 
   this.button1 = new System.Windows.Forms.Button(); 
   this.SuspendLayout(); 
   // 
   // button1 
   // 
   this.button1.Location = new System.Drawing.Point(48, 48); 
   this.button1.Name = "button1"; 
   this.button1.TabIndex = 0; 
   this.button1.Text = "button1"; 
   this.button1.Click += new  
 System.EventHandler(this.button1_Click); 
   // 
   // Form1 
   // 
   this.AutoScaleBaseSize = new System.Drawing.Size(6, 15); 
   this.ClientSize = new System.Drawing.Size(208, 128); 
   this.Controls.Add(this.button1); 
   this.Name = "Form1"; 
   this.Text = "Form1"; 
   this.ResumeLayout(false); 
  } 
  #endregion 
  /// <summary> 
  /// The main entry point for the application. 
  /// </summary> 
  [STAThread] 
  static void Main() 
  { 
   Application.Run(new Form1()); 
  } 
  private void button1_Click(object sender, System.EventArgs e) 
  { 
   MessageBox.Show("Hello World"); 
  } 
 } 
}


L2. Hello World in Visual J# .NET

package HelloJS; 
import System.Drawing.*; 
import System.Collections.*; 
import System.ComponentModel.*; 
import System.Windows.Forms.*; 
import System.Data.*; 
/** 
 * Summary description for Form1. 
 */ 
public class Form1 extends System.Windows.Forms.Form 
{ 
 private System.Windows.Forms.Button button1; 
 /** 
  * Required designer variable. 
  */ 
 private System.ComponentModel.Container components = null; 
 public Form1() 
 { 
  // 
  // Required for Windows Form Designer support 
  // 
  InitializeComponent(); 
  // 
  // TODO: Add any constructor code after InitializeComponent call 
  // 
 } 
 /** 
  * Clean up any resources being used. 
  */ 
 protected void Dispose(boolean disposing) 
 { 
  if (disposing) 
  { 
   if (components != null) 
   { 
 components.Dispose(); 
   } 
  } 
  super.Dispose(disposing); 
 } 
 #region Windows Form Designer generated code 
 /** 
  * Required method for Designer support - do not modify 
  * the contents of this method with the code editor. 
  */ 
 private void InitializeComponent() 
 { 
  this.button1 = new System.Windows.Forms.Button(); 
  this.SuspendLayout(); 
  // 
  // button1 
  // 
  this.button1.set_Location(new System.Drawing.Point(48, 40)); 
  this.button1.set_Name("button1"); 
  this.button1.set_TabIndex(0); 
  this.button1.set_Text("button1"); 
  this.button1.add_Click( new System.EventHandler(this.button1_Click)  
   ); 
  // 
  // Form1 
  // 
  this.set_AutoScaleBaseSize(new System.Drawing.Size(6, 15)); 
  this.set_ClientSize(new System.Drawing.Size(192, 120)); 
  this.get_Controls().Add(this.button1); 
  this.set_Name("Form1"); 
  this.set_Text("Form1"); 
  this.ResumeLayout(false); 
 } 
 #endregion 
 /** 
  * The main entry point for the application. 
  */ 
 /** @attribute System.STAThread() */ 
 public static void main(String[] args) 
 { 
  Application.Run(new Form1()); 
 } 
 private void button1_Click (Object sender, System.EventArgs e) 
 { 
  MessageBox.Show("Hello World"); 
 } 
}


Wie Sie sehen können, sind die beiden Codeabschnitte einander sehr ähnlich. Die using-Anweisung wird zu einer Import-Anweisung. Der C#-Datentyp bool lautet in Visual J# .NET Boolean. Zur Ableitung einer neuen Klasse in C# setzen Sie wie folgt einen Doppelpunkt ein:

public class Form1 : System.Windows.Forms.Form


Visual J# .NET verwendet stattdessen das extends-Schlüsselwort:

public class Form1 extends System.Windows.Forms.Form


Es gibt noch weitere offensichtliche Unterschiede. Sie sollten vor allem im Hinterkopf behalten, dass Visual J# .NET die Java-Sprache ist, nicht die Java-Plattform. Sie wird bereitgestellt, um Java-Entwicklern (insbesondere Entwicklern, die J++ verwenden) die optimale Nutzung ihrer Talente und vorhandenen Codebasis zu ermöglichen.

Unterstützung für Mobilgeräte

Dieser Aspekt mag noch nicht so wahnsinnig wichtig erscheinen, da die Entwicklung für Pocket PC- und Windows CE-Geräte noch in den Kinderschuhen steckt, doch die Unterstützung für Mobilgeräte ist bereits jetzt immens. Da kann man sich leicht vorstellen, wie wichtig es ist, Programme für diese Geräte zu entwickeln, mit denen Sie Ihre Daten überallhin mitnehmen, verändern, zurück zum Desktop übertragen und synchronisieren können.

Wenn Sie die Betaversionen von Smart Device Extensions (für die Entwicklung von binären clientseitigen Anwendungen für Mobilgeräte) oder Microsoft Mobile Internet Toolkit (für die Entwicklung von Webanwendungen, die auf Mobilgeräte abzielen) verfolgt haben, dürften Ihnen einige Namensänderungen aufgefallen sein. Sie verwenden das Mobile Internet Toolkit nicht mehr. Jetzt erstellen Sie eine mobile Webanwendung und platzieren mobile Websteuerelemente auf mobilen Web Forms. Was das Compact Framework angeht, so erstellen Sie weiterhin Smart Device-Anwendungen.
Die Entwicklung von mobilen Anwendungen ist in der Regel mit der Endversion viel einfacher als mit den Betaversionen, die Sie vielleicht ausprobiert haben. Der Emulator scheint jetzt z.B. weitgehend fehlerfrei zu funktionieren. Lassen Sie mich erklären, was es Neues sowohl für mobile Clientanwendungen als auch für Webanwendungen gibt.

Mobile Clientanwendungen

Wie der Name andeutet, ist das .NET Compact Framework eine Untermenge von .NET Framework 1.1. Technologien, die unter Windows CE nicht vorhanden sind, wie z.B. Active Directory® oder Enterprise Services, werden nicht unterstützt. Darüber hinaus werden jedoch auch Funktionen nicht unterstützt, die sehr wohl hätten integriert werden können, z.B. .NET-Remoting und -Konfiguration.
Alle wesentlichen Tools sind jedoch vorhanden, einschließlich Sockets, Datenzugriff, Unterstützung für das Aufrufen von Web Services und Grafiken. Ich habe ein einfaches Dienstprogramm geschrieben, mit dem ein Bild im Handumdrehen aus einem URL gedownloadet und in einer PictureBox angezeigt werden kann. Sie können ein Bitmapobjekt aus einem Stream abrufen und einen Stream aus einem HttpWebResponse-Objekt zurückgeben. Wenn Sie diese beiden Funktionen kombinieren, haben Sie eine Möglichkeit, Bilder dynamisch aus URLs zu laden, wie in Listing 3 veranschaulicht.

L3. Loading Images from URLs

Imports System.Net 
Imports System.IO 
Private Sub LoadPictureFromURL(ByVal pb As PictureBox, _ 
  ByVal URL As String) 
 Dim MyStream As Stream 
 Try 
  '-- Create request and response objects 
  Dim Request As HttpWebRequest = _ 
 CType(WebRequest.Create(URL), HttpWebRequest) 
  Dim Response As HttpWebResponse = _ 
 CType(Request.GetResponse(), HttpWebResponse) 
  '-- Get the response back as a Stream 
  MyStream = Response.GetResponseStream() 
  '-- Create a bitmap from that Stream 
  Dim Bm As Bitmap = New Bitmap(MyStream) 
  '-- Set the bitmap into the Picturebox 
  pb.Image = Bm 
  '-- Close the stream 
  MyStream.Close() 
 Catch ex As Exception 
  If Not MyStream Is Nothing Then 
   MyStream.Close() 
  End If 
  MsgBox(ex.Message) 
 End Try 
End Sub 


Seit Beta 1 hat das Compact Framework-Team ein DataGrid-Steuerelement hinzugefügt, das jedoch recht schwer zu finden war. In einigen Fällen wird das DataGrid-Steuerelement in der Visual Studio .NET-Toolbox nicht angezeigt. Sie können es aufrufen, indem Sie die Toolbox auswählen, die Option Elemente hinzufügen/entfernen wählen und im Dialogfeld Hinzufügen/Entfernen auf die Schaltfläche Zurücksetzen klicken. Weitere coole Steuerelemente für Windows CE, wie TreeView, Toolbar, InputPanel, ListView, ProgressBar, TabControl, StatusBar und TrackBar, sind ebenfalls verfügbar.
Ein Feature, das ich an mobilen Anwendungen sehr zu schätzen weiß, ist dass es möglich ist, eine .NET Compact Framework-kompilierte Anwendung (mobile Anwendung) ohne Neukompilierung direkt in der Desktopversion von .NET Framework auszuführen. Zu diesem Zweck stellt Microsoft ein erneut anzielbares enum-Schlüsselwort im Assemblymanifest bereit. Ich weiß nicht, ob das so eine gute Idee ist, aber es ist gut zu wissen, dass es möglich ist, eine mobile Anwendung auf dem Desktop auszuführen. Umgekehrt funktioniert es nicht: Sie können keine desktopzentrierte .NET Framework-Anwendung auf ein Gerät kopieren und sie ausführen, ohne dass eine Neukompilierung erforderlich wird.

Sie sollten mit Bedacht vorgehen und eine mobile Anwendung nicht überfrachten. Gestalten Sie Ihre Oberfläche möglichst einfach. Der Stift und die Tastatur stellen Einschränkungen dar, und das Gesamtziel einer mobilen Anwendung besteht darin, dass Benutzer Daten schnell über eine sehr einfache Oberfläche eingeben können.

Sie können mobile Anwendungen auf Ihrem PC über einen Hardware- und Software-Pocket PC-Emulator debuggen, der im Lieferumfang von Visual Studio .NET 2003 enthalten ist. Beachten Sie, dass Sie zum Schreiben des Codes noch nicht mal ein Gerät benötigen. Wenn Sie mit der Bereitstellung beginnen können, können Sie direkt an das Gerät bereitstellen oder eine CAB-Datei erstellen, die zur Installation der Anwendung auf dem Gerät verwendet werden kann.


vsnet_fig02.gif

Abbildung 2 FnetSchedule


Ich habe eine kleine mobile Anwendung namens FnetSchedule geschrieben, die unter http://training.franklins.net/dotnet.aspx (in Englisch) auf einen Web Service zugreift, um ein DataSet mit einem Zeitplan der in der Entwicklung befindlichen Visual Basic .NET-Klassen zurückzugeben, wie in Abbildung 2 dargestellt. Sie können unter http://www.franklins.net/dotnet/ (in Englisch) darauf zugreifen.

Mobile Webanwendungen

Mobile Webanwendungen sind ASP.NET-Anwendungen, die auf Geräte wie WAP-kompatible Mobiltelefone abzielen. Kleinere Seiten, geringere HTML- und Codegenerierung sowie eine reduzierte Benutzeroberfläche sind nur der Anfang. Wie ihr großer Bruder, die ASP.NET-Anwendungen, verwenden mobile Webanwendungen serverseitige Steuerelemente, die gerätespezifischen Inhalt darstellen.
Das Beste an mobilen Webanwendungen ist, dass Sie eine Anwendung schreiben und von fast jedem Gerät (einschließlich Mobiltelefonen) darauf zugreifen können. Die Steuerelemente in System.Mobile.Web.UI.MobileControls unterstützen mehr als 200 unterschiedliche Dienste, und diese Zahl nimmt stetig zu. Alle Gerätefunktionen werden in der Datei Machine.Config auf dem Webserver gespeichert. Sie können Geräteupdates unter http://asp.net/mobile/deviceupdate.aspx (in Englisch) downloaden.

Zu den mobilen Web Form-Steuerelementen zählen AdRotator, Calendar, Command (button), CompareValidator, CustomValidator, DeviceSpecific, Image, Label, Link, List, ObjectList, Panel, PhoneCall, RangeValidator, RegularExpressionValidator, RequiredFieldValidator, SelectionList, StyleSheet, TextBox, TextView und ein ValidationSummary-Steuerelement.
Wie bei ASP.NET-Standardanwendungen sind auch die browserbasierten HTML-Steuerelemente für den Zugriff durch clientseitige Skriptingsprachen wie JavaScript und VBScript verfügbar.

Zu den Steuerelementen, die ich hier gesondert hervorheben sollte, zählt SelectionList: Dabei kann es sich um eine Liste, eine Dropdownliste oder ein Kombinationsfeld handeln. Mehrere Elemente können ausgewählt werden, und das Treffen einer Auswahl bewirkt keine Zurückübertragung des Formulars. Zudem bietet das SelectionList-Steuerelement keine Paginierungsunterstützung und ist somit ideal für kurze Listen geeignet.

Das DeviceSpecific-Steuerelement bietet eine einfache Möglichkeit, Ihren eigenen, geräteabhängigen Inhalt bereitzustellen. Sie können unterschiedliche(n) Code und HTML basierend auf dem Typ des Clientgeräts anzeigen.

Das TextView-Steuerelement zeigt Textmengen mit optionalen Markuptags an. Das Format des Textes in einem TextView-Steuerelement ist mit dem in Literaltext in einem Formular identisch. Anders als Literaltext in einem Formular können Sie jedoch den Text in einem TextView-Steuerelement festlegen. Das TextView-Steuerelement unterstützt die interne Paginierung.

Das PhoneCall-Steuerelement ist ein bedienfreundliches, textbasiertes, auf die Ausgabe beschränktes Steuerelement, mit dem eine Telefonnummer dargestellt werden kann. Für Geräte wie Mobiltelefone, die das Durchführen von Telefonanrufen unterstützen, wird das PhoneCall-Steuerelement als interaktives Element dargestellt, das bei Aktivierung einen Anruf durchführt. Auf anderen Geräten wird die Telefonnummer als Text mit einem optionalen Hyperlink dargestellt.

Und schließlich bietet das ObjectList-Steuerelement eine funktionsreiche Ansicht einer Liste von Datenobjekten. Das ObjectList-Steuerelement erbt einen Großteil seines Verhaltens, einschließlich der Unterstützung für die Vorlagendarstellung, unter Verwendung von Gerätevorlagensätzen und interner Paginierung, vom List-Steuerelement, verleiht Ihnen jedoch ein größeres Maß an Kontrolle als dies bei einer Liste der Fall ist.

Ich konnte meine FnetSchedule-Anwendung mit nur minimalen Veränderungen in eine mobile Webanwendung übertragen. Sie können mit einem mobilen Gerät unter http://www.franklins.net/mobile/schedule (in Englisch) darauf zugreifen.

C++-Rundumerneuerung

Die neue Version von C++ in Visual Studio .NET 2003 ist das wohl wichtigste Visual C++®-Upgrade seit langem. Nun können C++-Programmierer auf dasselbe Windows Forms-Modul zugreifen, das auch C# bietet. Dieses Feature umfasst volle Unterstützung für die Toolbox und den Server-Explorer, so dass Sie Steuerelemente und Komponenten per Drag & Drop verschieben oder ausschneiden und in Ihre Windows Forms-Anwendung kopieren können. Zudem können Sie die Eigenschaften Ihrer Steuerelemente und Komponenten ganz einfach über das Eigenschaften-Datenblatt bearbeiten.

Visual C++ .NET ist auch stärker ANSI-kompatibel als die Vorversion. Dies bringt eine Reihe von Inkompatibilitätsänderungen mit sich, die häufig in Form von Compilerfehlern auftreten und in den Vorversionen vernachlässigt wurden. Es treten jedoch auch eine Reihe von Hintergrund- oder Laufzeitfehlern auf. Aufgrund dieser Konformität ist es in den meisten Fällen möglich, C++-Code zu kompilieren, der für andere Plattformen entwickelt wurde.
Die Compileränderungen umfassen Folgendes:

  • Ein Feature, das Ihnen das Erstellen eines Delegaten für eine Methode eines Werttyps ermöglicht.

  • Die Compileroption /arch (CPU-Mindestarchitektur), die hinzugefügt wurde, um SSE (SIMD Extensions)- und SSE2-Streaminganweisungen nutzen zu können.

  • Eine /G7-Compileroption (Prozessoroptimierung), um den Compiler anzuweisen, die Codegenerierung für den angegebenen Prozessor zu optimieren.

  • Eine erweiterte /GS-Compileroption, mit der Sie lokale Variablen vor direkten Pufferüberläufen schützen können.

  • Die Compileroption /Zm gibt jetzt die Speicherzuweisungshöchstgrenze für den vorkompilierten Header an.

  • Die Option /noBool wurde entfernt.

  • Die Option /Gf wird abgelehnt und wird in der nächsten Version von Visual C++ nicht mehr enthalten sein.


Für die systeminternen Funktionen _InterlockedCompareExchange, _InterlockedDecrement, _InterlockedExchange, _InterlockedExchangeAdd und _InterlockedIncrement wurde Dokumentation bereitgestellt, und die systeminterne Funktion ReadWriteBarrier wurde neu hinzugefügt, so dass die Optimierung von Lese- und Schreibvorgängen im globalen Arbeitsspeicher effektiv blockiert wird. Dies kann von Nutzen sein, um den Status von globalen Variablen an einem bestimmten Punkt in Ihrem Code für Multithreadinganwendungen sicherzustellen.

Es wurden auch eine Handvoll von Optionen für Links hinzugefügt: /ASSEMBLYDEBUG gibt das Debuggable-Attribut mit Debuginformationsverfolgung aus und deaktiviert JIT-Optimierungen (Just-In Time). /ASSEMBLYLINKRESOURCE erstellt einen Link zu einer .NET Framework-Ressource in der Ausgabedatei. Mit /DELAYSIGN können Sie lediglich den öffentlichen Schlüssel in der Assembly platzieren. /KEYFILE gibt eine Schlüsseldatei mit Strong Name an. /KEYCONTAINER legt einen Container für den Schlüssel fest, und /SAFESEH weist den Linker an, nur dann ein Bild zu erzeugen, wenn gleichzeitig auch eine Tabelle der sicheren Ausnahmehandler für das Bild erstellt werden kann.

Visual C++ .NET bietet neue Eigenschaftenseiten und eine Reihe von neuen Objekten, sowie neue Eigenschaften und Methoden für vorhandene Objekte, die das Projektbuildmodell optimieren. Zu den Eigenschaftenseiten gehören eine Eigenschaftenseite für verwaltete Ressourcen, ein XML Data Generator-Tool, ein verwalteter Wrapper, eine primäre Interop-Seite und eine Eigenschaftenseite für zusätzliche verwaltete Wrapper.

Neue Datenprovider für Oracle und ODBC

Vermutlich das zweitwichtigste neue Feature (je nachdem, wie wichtig Ihnen Oracle- und ODBC-Entwicklung sind) ist die Einführung dieser beiden neuen ADO.NET-Datenprovider.
Ich kann nichts dazu sagen, ob sie gut arbeiten, nur dass die Berichte über die Verwendung von ODBC für den Zugriff auf DB2 bisher sehr positiv waren. Nun können Sie die COM-Schicht (OLE DB) umgehen und direkt in die ODBC-API (ODBC.DLL) und/oder einen Oracle-Provider mit verwaltetem Code codieren. Sie brauchen nur noch die ADO.NET-Objekte zu verwenden, die Sie bereits kennen und lieben.
Eine weitere Veränderung besteht darin, dass die System.Data.SqlClient.SqlDataReader HasRows-Eigenschaft den Wert dafür enthält, ob ein Reader Daten zurückgegeben hat. Dies vereinfacht das Arbeiten mit leeren Resultsets.

IP Version 6

Dem Internet gehen allmählich die IP-Adressen im aktuellen Format 255.255.255.255 aus. Die Nachfrage nach statischen IP-Adressen wächst unaufhörlich. Komplizierte Hardware- und Softwareschemas wie Network Address Translation (NAT) und IP-Freigabe auf Websites sind erforderlich, um dem Umstand Rechnung zu tragen, dass letztendlich nur 2554 bzw. ca. 4.300.000.000 eindeutige Zahlen für die Verwendung als IP-Adressen bereitstehen. Das ist ein Problem.

1995 hat die Internet Engineering Task Force (IETF) die grundlegende Spezifikation für Internet Protocol Version 6 (IPv6) veröffentlicht. Die meisten Internetseiten von heute verwenden IPv4, das fast 20 Jahre alt ist. IPv6 wird allmählich IPv4 ablösen, wobei die beiden Protokolle während einer Übergangszeit parallel bestehen werden.

IPv6-Adressen haben 128 Bit, im Gegensatz zu den 32-Bit-IP-Adressen von IPv4. Wenn man die Gesamtzahl von IPv4-Adressen als einen Millimeter darstellt, würde der gesamte IPv6-Adressraum laut dem WIDE Project (in Englisch) das 80-fache des Durchmessers unserer Galaxie ausmachen. Das sollte reichen, meinen Sie nicht auch?

Neben der Unterstützung für mehr IP-Adressen bietet IPv6 auch viele Verbesserungen gegenüber IPv4 in Bereichen wie Routing und statusfreier Netzwerkautokonfiguration. IP-Adressen können dynamisch verwaltet und von den Routern zugewiesen werden, ohne auf DHCP (Dynamic Host Configuration Protocol) zurückgreifen zu müssen. Sie können alles Wissenswerte über die Autokonfiguration unter IPv6 Stateless Address Autoconfiguration (in Englisch) nachlesen.

Ein weiteres neues Feature in IPv6 ist echtes Multicasting. Dies ermöglicht es Routern, dasselbe Paket an mehrere Router zu senden. Clients können sich so in Paketstreams einklinken, die eine einzelne IP-Zieladresse haben (auch als Multicastadresse bezeichnet), so dass es nicht mehr notwendig ist, dass jeder Client seinen eigenen Datenstream erhält.

Ein Livewebcast mit IPv4 sieht wie ein regulärer Webcast aus, doch in Wahrheit werden die gleichen Pakete an mehrere Clients gesendet. Das ist quasi wie bei der Rundfunkübertragung: Es gibt nur eine Welle. Es liegt ganz beim Client, die Antennen aufzustellen und diese Daten zu erfassen. Die Infrastruktur wird weniger stark belastet, und jeder erhält ungefähr zum gleichen Zeitpunkt die gleichen Daten.
.NET Framework 1.1 bietet Unterstützung für IPv6 im System.Net-Namespace. In der näheren Zukunft werden Sie wahrscheinlich mehr von IPv6 hören.

Änderungen in Visual Studio .NET

Ich komme sofort wieder auf .NET Framework 1.1 zurück, doch zunächst wollte ich Ihnen erläutern, was sich in Visual Studio .NET 2003 geändert hat.

Design Das Design von Visual Studio .NET 2003 ist im Wesentlichen unverändert geblieben, aber etwas peppiger geworden. Ich finde es einfacher, die Startseite zu umgehen, wie in Abbildung 3 dargestellt.


vsnet_fig03.gif

Abbildung 3


Leider kann man sich immer noch in diesem Dockingwirrwarr verirren, und das wird sich auch so schnell nicht ändern. Denken Sie also daran, immer auf die Titelleiste eines Fensters doppelzuklicken, um es abzudocken, und anschließend auf die Titelleiste doppelzuklicken, um sie erneut anzudocken - auf diese Weise vermeiden Sie das Schlimmste. Denken Sie auch daran, dass Sie jederzeit im Dialogfeld Extras | Optionen auf der Registerkarte Umgebung | Allgemein auf die Schaltfläche Fensterlayout zurücksetzen klicken können.
Autovervollständigungsfeatures in Visual Basic .NET Es werden automatisch eine Catch-Anweisung und End Try geschrieben, wenn Sie Try eingeben. Dies ist ein nützliches Feature (das schon lange überfällig war), aber was ist mit der automatischen Implementierung von Schnittstellen?

Wenn Sie in Visual Basic .NET eine Implements-Anweisung eingeben, wird die Schnittstelle jetzt umgehend für Sie geschrieben. Probieren Sie es einfach mal aus. Erstellen Sie eine neue Klasse mit der folgenden Anweisung:

Public Class Foo 
 Implements IDisposable 
End Class

Sobald Sie nach IDisposable die EINGABETASTE drücken, wird Folgendes ausgegeben:

Public Class Foo 
 Implements IDisposable 
 Public Sub Dispose() Implements System.IDisposable.Dispose 
 End Sub 
End Class


Hinzufügen von Webverweisen In Abbildung 4 Im Bereich Start Browsing for Web Services des Dialogfelds Add Web Reference werden nun Weblinks zu verfügbaren Web Services, sowohl lokal als auch im Internet, bereitgestellt. Interessanterweise war das Durchsuchen des lokalen Computers nach Webverweisen bereits in Beta 1 enthalten, dieses Feature wurde jedoch in letzter Sekunde wieder entfernt. Ich bin froh, dass es wieder verfügbar ist.


vsnet_fig04.gif

Abbildung 4 Start Browsing for Web Services


Sie können den Webverweis vor dem Hinzufügen auch umbenennen, wie in Abbildung 5 dargestellt.


vsnet_fig05.gif

Abbildung 5 Webverweis umbenennen


Neue Debuggerfeatures Remotedebugging kann nun über Pipes durchgeführt werden. Dies bietet Sicherheitsvorteile, die in TCP/IP nicht gegeben sind. Das Debuggen mit Pipes erfordert den Remote Debug Manager, der nur für C++ verfügbar ist. Der Debugger erhält auch Unterstützung für SOS, ein leistungsstarkes Dumpanzeigetool für verwalteten Code, das über das Befehlsfenster verknüpft wird. Fehlermeldungen wurden allgemein verbessert, insbesondere beim Debuggen von ASP.NET-Anwendungen. Debugsymbole können sich nun auf einem separaten Symbolserver, auf Ihrem eigenen Server oder auf dem öffentlichen Microsoft-Symbolserver befinden und können automatisch gedownloadet werden, wenn ein Ausnahmefehler auftritt. Darüber hinaus gibt es neue Debuggingsicherheitseinstellungen, so dass Sie z.B. festlegen können, wer zum Debuggen berechtigt ist und wer nicht.

Migrieren von Einstellungen aus Visual Studio .NET 2002 Sie können bestimmte Einstellungen des Dialogfelds Optionen aus einer früheren Version von Visual Studio .NET in die neue Version kopieren. Wenn auf demselben Computer unterschiedliche Versionen des Programms installiert sind, wird beim ersten Starten von Visual Studio .NET 2003 ein Dialogfeld angezeigt, in dem Sie wählen können, Ihre vorhandenen Einstellungen zu migrieren. Klicken Sie einfach auf Ja, um Ihre Optionen und Einstellungen zu migrieren.

Änderungen im Projektmappen-Explorer. Ein Zweck von Visual Studio besteht darin, die Designer mit dem zugrunde liegenden Quellcode zu synchronisieren. Dieses Konzept geht nun noch einen Schritt weiter. Eine neue Option weist Visual Studio .NET an, einen Designer, den Sie aufrufen, automatisch im Projektmappen-Explorer auszuwählen. Wählen Sie im Menü Extras den Befehl Optionen, öffnen Sie das Dialogfeld Umgebung | Projekte und Projektmappen, und deaktivieren Sie das Kontrollkästchen für Aktives Objekt verfolgen.

Enterprise Services. Jetzt ist eine Low-Level-Registrierung bei den Enterprise Services verfügbar. Der Gedanke dahinter ist der, dass Sie Enterprise Services nun verwenden können, ohne von einer ServicedComponent erben zu müssen.

ASP.NET-Features. Die große Neuerung hier ist die System.Web.UI.Page.ViewStateUserKey-Eigenschaft. Wie Sie wahrscheinlich inzwischen bemerkt haben, kann die Verwaltung des ViewState durch ASP.NET recht diffizil sein. Weitere Informationen zu den Risiken dieser Vorgehensweise finden Sie in dem Artikel Viewstate Optimization Strategies in ASP.NET (in Englisch).

Sie sollten nicht nur zwecks Skalierbarkeit Vorsicht walten lassen, es sind auch Sicherheitsrisiken zu bedenken. Die __VIEWSTATE-Variable kann gehackt werden, so dass Ihre ASP.NET-Anwendung mit nur einem Mausklick angegriffen werden kann.

Durch das Setzen der ViewStateUserKey-Eigenschaft können Sie Angriffe auf Ihre Anwendung verhindern. Dies wird dadurch ermöglicht, dass der __VIEWSTATE-Variable ein Bezeichner für einzelne Benutzer zugewiesen wird.

Sie können diese Eigenschaft auf einen beliebigen Zeichenfolgenwert setzen (z.B. die Sitzungs-ID des Benutzers), Ihnen sollte jedoch klar sein, dass Sie die Eigenschaft während der Page_Init-Phase der Seitenverarbeitung festlegen müssen. Wenn Sie diese Eigenschaft während der Page_Load-Phase festlegen, wird ein Ausnahmefehler ausgelöst.
Als Abrundung der neuen ASP.NET-Änderungen unterstützen die Steuerelemente Checkbox, ListBox, ListControl, RadioButtonList und Dropdown Listbox jetzt die SelectedValue-Eigenschaft.

Enterprise Instrumentation Framework. Das Enterprise Instrumentation Framework (EIF) übernimmt und erweitert die Ereignisprotokollierung, -verfolgung und Leistungszähler, um diese Funktionen (und mehr) noch leichter über das Netzwerk unterstützen zu können. Mithilfe des EIF können Unternehmen die Kosten für Entwicklung und Wartung senken. Kunden können damit effiziente Überwachung und Problembehandlung in großen Produktionsumgebungen bereitstellen. Dies ist beim Erstellen von verteilten Anwendungen ein zentraler Faktor. Zur Vereinheitlichung der in Windows integrierten Ereignisprotokollierungs- und Verfolgungsmechanismen bietet das EIF eine konsistente API und Konfigurationsschicht mit niedrigem Profil. Entwickler können dieses Feature nutzen, um Überwachungen, Fehler, Warnungen, Geschäftsereignisse und Diagnoseereignisse zu veröffentlichen, die von den Supportteams überwacht und analysiert werden. Kurz gesagt: Sie erhalten eine bessere Instrumentierung in einer größeren Bandbreite von Umgebungen.

Unterstützung für Universal Time. Universal Time ist der internationale Standard, auf dessen Grundlage alle anderen Zeiten berechnet werden. Coordinated Universal Time (UTC) war zuvor als Greenwich Mean Time (GMT) bekannt. Mehrere Klassen im .NET Framework wurden aktualisiert, um Werte zu unterstützen, die in UTC ausgedrückt werden.

Datum und Uhrzeit in Windows Management Instrumentation (WMI) werden im DMTF-Datumsformat dargestellt. Dieses Format wird in der WMI-SDK-Dokumentation erläutert. (Sie können über die Seite Windows Management Instrumentation (WMI) Tools (in Englisch) auf das SDK zugreifen.) Die niedrigste Genauigkeit in DMTF beträgt Mikrosekunden und in DateTime sogar nur einen Tick, das heißt 100 Nanosekunden. Wenn Sie aus Ticks konvertieren, wird der Wert auf die nächste Mikrosekunde gerundet.
Es gibt eine neue System.Management.ManagementDateTimeConverter-Klasse, die zwischen DMTF-Datumsformat und CLR-kompatiblen DateTime-Formaten konvertiert.

SMP-Threadsynchronisierung .NET Framework 1.1 fügt Features für Multiprozessor-Threadsynchronisierung (flüchtige Lese- und Schreibvorgänge sowie Arbeitsspeicherlöschungen) hinzu. Natürlich sollten diese Threadsynchronisierungen vorsichtig angegangen werden.

Schlussfolgerung:

Das war jetzt vorerst alles - ein Überblick über die wichtigsten Änderungen in .NET Framework 1.1 und Visual Studio .NET 2003, mit Ausnahme von Windows Forms. Es ist schwer, sich an den Gedanken zu gewöhnen, dass bei der Installation von neuen Anwendungen in .NET die alten Anwendungen nicht zerstört oder ersetzt werden. Natürlich hätte dies, angesichts meines Wissens über das .NET Framework, für mich keine Überraschung sein sollen, denn das Eliminieren von Versionierungsproblemen ist eine wichtige Sache. Aber ich war so sehr daran gewöhnt, Stunden über Stunden damit zu verbringen, den Schaden wieder gutzumachen, den eine Rogue-Installation auf meinem System angerichtet hatte, dass ich noch gar nicht so genau weiß, was ich mit dieser neu gewonnenen freien Zeit anfangen soll!


Verwandte Artikel

Windows CE.NET: New Version Offers Revamped Platform Builder, Improved Tools, Enhanced API, and Source Code (in Englisch)
Windows CE: Develop Handheld Apps for the .NET Compact Framework with Visual Studio .NET (in Englisch)
Microsoft Developer Tools Roadmap 2002-2004 (in Englisch)
http://www.netbsd.org/Documentation/network/ipv6 (in Englisch)


Anzeigen: