Exemplarische Vorgehensweise: Konvertieren eines Websiteprojekts in ein Webanwendungsprojekt in Visual Studio
Aktualisiert: November 2007
In dieser exemplarischen Vorgehensweise wird beschrieben, wie ein vorhandenes Microsoft Visual Studio 2005-Websiteprojekt in ein Microsoft Visual Studio 2005-Webanwendungsprojekt konvertiert wird. Das Webanwendungsprojektmodell basiert auf dem gleichen konzeptionellen Ansatz wie Webprojekte in Visual Studio .NET 2003. Dazu gehören eine Projektdatei zum Ein- und Ausschließen von Dateien sowie die Kompilierung in eine einzelne Assembly. Weitere Informationen finden Sie unter Webprojektkonvertierung aus Visual Studio .NET.
Hinweis: |
---|
Sie können ASP.NET-Webanwendungsprojekte mithilfe von Visual Studio oder Visual Web Developer Express Edition erstellen. |
In dieser exemplarischen Vorgehensweise werden u. a. die folgenden Aufgaben veranschaulicht:
Öffnen und Überprüfen des Visual Studio 2005-Websiteprojekts
Erstellen eines neuen Visual Studio 2008-Webanwendungsprojekts
Festlegen von Projektverweisen
Kopieren von Dateien in das neue Webanwendungsprojekt
Konvertieren der Projektdateien
Ausführen des Webanwendungsprojekts
Hinzufügen von Namespacesyntax
Konvertieren von deklarativen typisierten Datasets
Konvertieren von Profilobjektcode
Vorbereitungsmaßnahmen
Für die Durchführung dieser exemplarischen Vorgehensweise benötigen Sie Folgendes:
Visual Studio 2008 oder Microsoft Visual Studio 2005 Service Pack 1 (SP1) oder Visual Web Developer Express Edition
.NET Framework Version 2.0.
Öffnen und Überprüfen des Visual Studio 2005-Websiteprojekts
Bevor Sie ein Projekt konvertieren, sollten Sie überprüfen, ob es ordnungsgemäß funktioniert. Dies verhindert Fehler bei der Konvertierung.
So öffnen und überprüfen Sie das Visual Studio 2005-Webprojekt
Öffnen Sie die vorhandene Visual Studio 2005-Projektmappe.
Klicken Sie im Menü Datei auf Öffnen, und klicken Sie anschließend auf Website.
Das Dialogfeld Website öffnen wird angezeigt.
Wählen Sie den Projektordner, den Sie öffnen möchten, und klicken Sie anschließend auf Öffnen.
Klicken Sie im Menü Erstellen auf Website erstellen.
Klicken Sie im Menü Debuggen auf Debuggen starten. Alternativ können Sie auch die Taste F5 drücken.
Hinweis: Wenn das Dialogfeld Debuggen nicht aktiviert angezeigt wird, wählen Sie Neue Web.config-Datei mit aktiviertem Debuggen aus.
Stellen Sie sicher, dass das Projekt erwartungsgemäß ausgeführt wird.
Erstellen eines neuen Visual Studio 2008-Webanwendungsprojekts
Die beste Strategie zum Konvertieren eines vorhandenen Visual Studio 2005-Websiteprojekts ist es, zunächst ein neues, leeres Visual Studio 2008-Webanwendungsprojekt in einem separaten Verzeichnis zu erstellen. So werden Änderungen an vorhandenen Websitedateien vermieden. Darüber hinaus ermöglicht dies das Kopieren vorhandener Funktionen in das neue Webanwendungsprojekt.
Sie können das neue Projekt einer bestehenden Projektmappe hinzufügen. Dies bietet sich besonders an, wenn mehrere Klassenbibliotheksprojekte verwendet werden sollen. Alternativ können Sie auch eine neue Instanz von Visual Studio starten und eine neue Projektmappe und ein neues Projekt erstellen.
So erstellen Sie ein neues Visual Studio 2008-Webanwendungsprojekt in einer neuen Projektmappe
Schließen Sie in Visual Studio 2008 alle geöffneten Projektmappen.
Klicken Sie im Menü Datei erst auf Neu und dann auf Projekt.
Das Dialogfeld Neues Projekt wird angezeigt.
Erweitern Sie im Dialogfeld Neues Projekt im Bereich Projekttypen die gewünschte Sprache, und wählen Sie anschließend Web aus, um die Webvorlagen anzuzeigen.
Wählen Sie ASP.NET-Webanwendung aus.
Geben Sie in den Feldern Name, Speicherort und Projektmappenname die gewünschten Werte ein, und klicken Sie anschließend auf OK, um das Webanwendungsprojekt zu erstellen.
Löschen Sie die automatisch erstellten Dateien Default.aspx und Web.config, nachdem das Projekt erstellt wurde.
Festlegen von Projektverweisen
Wenn das Visual Studio 2008-Websiteprojekt zusätzliche Projekt- oder Assemblyverweise erfordert, können Sie diese dem Webanwendungsprojekt hinzufügen. Eine Liste der Standardverweise für neue Visual Studio 2008-Webanwendungsprojekte finden Sie im Projektmappen-Explorer unter dem Knoten Verweise.
Hinweis: |
---|
Fügen Sie vor dem Konvertieren der Projektdateien Verweise auf das Webanwendungsprojekt für Assemblys im Ordner Bin hinzu, um Fehler zu vermeiden. Weitere Informationen zum Hinzufügen von Verweisen finden Sie im folgenden Verfahren. |
Weitere Informationen über Verweise finden Sie unter Projektverweise.
So fügen Sie Verweise auf ein Visual Studio 2008-Webanwendungsprojekt hinzu
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Verweise, und klicken Sie dann auf Verweis hinzufügen.
Das Dialogfeld Verweis hinzufügen wird angezeigt.
Wählen Sie den Verweis aus, den Sie hinzufügen möchten, und klicken Sie anschließend auf OK.
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Webanwendung, und klicken Sie auf Erstellen.
Visual Studio erstellt das Projekt und überprüft die Funktion der Verweise zwischen Projekten.
Kopieren von Dateien in das Webanwendungsprojekt
Die einfachste Art, vorhandene Dateien hinzuzufügen ist es, die Dateien im Verzeichnis eines Visual Studio 2008-Websiteprojekts in das Verzeichnis des Webanwendungsprojekts zu kopieren.
Hinweis: |
---|
Wenn während des Kopiervorgangs der Assistent zum Konfigurieren von Datenquellen gestartet wird, klicken Sie im Dialogfeld des Assistenten auf Abbrechen, um auch die restlichen Dateien zu kopieren. |
So kopieren Sie ein Websiteprojekt in ein Webanwendungsprojekt
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Websiteprojekt, und wählen Sie Ordner in Windows Explorer öffnen aus.
Wählen Sie die Dateien des zu kopierenden Websiteprojekts aus.
Klicken Sie mit der rechten Maustaste auf die beiden ausgewählten Dateien, und wählen Sie Kopieren aus.
Klicken Sie im Webanwendungsprojekt mit der rechten Maustaste auf das Webanwendungsprojekt, und wählen Sie Ordner in Windows Explorer öffnen aus.
Fügen Sie die Dateien des Websiteprojekts in das Verzeichnis der Webanwendung ein.
Klicken Sie im Projektmappen-Explorer des Webanwendungsprojekts auf die Schaltfläche Alle Dateien anzeigen.
Wählen Sie im Projektmappen-Explorer die neuen Dateien aus.
Klicken Sie mit der rechten Maustaste auf die ausgewählten Dateien, und klicken Sie anschließend auf Zu Projekt hinzufügen.
Einer der Unterschiede zwischen einem Visual Studio 2008-Websiteprojekt und einem Visual Studio 2008-Webanwendungsprojekt besteht darin, dass im Websiteprojektmodell die generierte partielle Klasse dynamisch generiert wird.
Nachdem Sie die Dateien aus dem Websiteprojekt in das Webanwendungsprojekt kopiert haben, werden Sie feststellen, dass die Code-Behind-Dateien für die jeweiligen Seiten und Benutzersteuerelemente weiterhin den ASPX-, ASCX- und MASTER-Dateien zugeordnet sind. Es wurden keine .designer.cs- oder .designer.vb-Dateien generiert. Im folgenden Schritt werden diese Seiten konvertiert, um deren partielle Klassen in einer .designer.cs- oder einer .designer.vb-Datei zu speichern.
Konvertieren der Projektdateien
Visual Studio beinhaltet eine Option, mit der Seiten und Klassen in einem Webanwendungsprojekt konvertiert werden können, um partielle Klassen zu verwenden. Partielle Klassen werden verwendet, um das Markup in einer Seite oder einem Benutzersteuerelement-Code-Behind-Code zu trennen. Diese vom Designer generierten Klassen werden in einer separaten Datei der Code-Behind-Datei gespeichert.
Der Konvertierungsprozess bewirkt, dass Visual Studio 2008 Benutzersteuerelemente und Masterseiten im Projekt rekursiv untersucht und für diese automatisch eine .designer.cs-Datei erstellt. Zusätzlich ändert Visual Studio die ASPX- und ASCX-Dateien so, dass diese das codeBehind-Attribut anstelle des codeFile-Attributs verwenden. Durch diesen Befehl wird zudem der Ordner App_Code in Old_App_Code umbenannt.
So konvertieren Sie Seiten und Klassen zur Verwendung von partiellen Klassen in einem Webanwendungsprojekt
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Stammprojektordner, der die zu konvertierenden Seiten und Klassen enthält, und klicken Sie anschließend auf In Webanwendung konvertieren.
Erstellen Sie das Projekt, um zu überprüfen, ob Kompilierungsfehler auftreten.
Die beiden wahrscheinlichsten Ursachen für möglicherweise auftretende Fehler sind folgende:
Ein fehlender Assemblyverweis, der dem Projekt hinzugefügt werden muss.
Ein Problem mit einem dynamisch generierten Typ, z. B. dem Profile-Objekt oder einem typisierten DataSet.
Wenn ein Assemblyverweis fehlt, öffnen Sie den Verweis-Manager, um den fehlenden Verweis hinzuzufügen. Wenn Sie einen dynamisch generierten Typ verwenden, lesen Sie die Abschnitte Konvertieren von deklarativen typisierten Datasets und Konvertieren von Profilobjektcode weiter unten in diesem Thema.
Da alle Klassen im Ordner App_Code von ASP.NET 2.0 dynamisch kompiliert werden, sollten als Teil der Visual Studio 2008-Webanwendung kompilierte Klassen nicht in diesem Ordner gespeichert werden. Andernfalls werden in diesem Ordner gespeicherte Klassen zweimal kompiliert. Beim ersten Mal als Teil der Assembly des Visual Studio 2008-Webanwendungsprojekts, beim zweiten Mal von ASP.NET zur Laufzeit. Dies kann eine "Typ konnte nicht geladen werden"-Ausnahme verursachen, die auftritt, da in der Anwendung doppelte Typnamen verwendet werden.
Daher sollten die Klassendateien in einem anderen Projektordner als dem Ordner App_Code gespeichert werden. Der Befehl In Webanwendung konvertieren übernimmt dies automatisch, indem der Ordner in Old_App_Code umbenannt wird.
Ausführen des Webanwendungsprojekts
Sie können die Anwendung jetzt kompilieren und ausführen. Standardmäßig verwendet Visual Studio 2008 den integrierten ASP.NET Development Server, um die Site auszuführen. Alternativ können Sie das Projekt zur Verwendung von Internetinformationsdienste (IIS) konfigurieren. Um die Einstellungen des Webanwendungsprojekts zu verwalten, klicken Sie mit der rechten Maustaste auf das Projekt, und klicken Sie dann auf Eigenschaften. Anschließend können Sie die Registerkarte Web auswählen, um die Laufzeiteinstellungen zu konfigurieren.
Weitere Informationen finden Sie unter Seite "Web", Projekt-Designer.
Weitere Konvertierungsmöglichkeiten
Beim Konvertieren eines Projekts in ein Webanwendungsprojekt sollten Sie weitere Konvertierungsmöglichkeiten in Betracht ziehen. Dies sind die Optionen:
Hinzufügen von Namespacesyntax
Konvertieren von deklarativen typisierten Datasets
Konvertieren von Profilobjektcode
Hinzufügen von Namespacesyntax
Standardmäßig enthalten Seiten und Klassen, die mit dem Visual Studio 2008-Websiteprojektmodell erstellt wurden, nicht automatisch einen Codenamespace. Seiten, Steuerelemente und Klassen, die mit dem Visual Studio 2008-Webanwendungsprojektmodell erstellt wurden, enthalten jedoch automatisch einen Codenamespace. Wenn Sie ein Websiteprojekt in ein Webanwendungsprojekt konvertieren, müssen Sie dem Code Namespaces hinzufügen.
Beispielsweise lassen sich beim Arbeiten mit C# Namespaces einfach zum Code von vorhandenen Klassen in Visual Studio hinzufügen, indem Sie im Code-Editor von C# den Kontextmenübefehl Umschließen mit verwenden.
So fügen Sie vorhandenen Klassen einen Namespace hinzu
Öffnen Sie die Codedatei, die Sie ändern möchten.
Wählen Sie im Quellcode-Editor eine Klasse (oder mehrere Klassen) aus, klicken Sie mit der rechten Maustaste auf den ausgewählten Code, und klicken Sie anschließend auf Umschließen mit.
Wählen Sie ein Namespace-Element in der Liste aus.
Dateien mit den Erweiterungen .aspx, .ascx, .master, .ashx, .asmx und .asax enthalten Direktiven (z. B. eine @ Page-Direktive) mit dem Inherits-Attribut oder dem Class-Attribut, die die Klassennamen auflisten, die aufgerufen werden, wenn es sich um Code-Behind-Seiten handelt. Wenn Sie den Code-Behind-Dateien dieser Dateitypen Namespaces hinzufügen, müssen Sie die Namespaces auch den Inherits-Deklarationen und Class-Deklarationen hinzufügen. Wenn Sie beispielsweise den WebApplication5-Namespace zur Code-Behind-Datei einer Seite mit dem Namen Details.aspx hinzufügen, müssen Sie das Inherits-Attribut der @ Page-Direktive von inherits=Details_aspx in inherits=WebApplication5.Details_aspx ändern.
Hinweis: |
---|
Wenn der Namespace in einer Datei mehrere Male aktualisiert werden muss, können Sie die Suchen-und-Ersetzen-Funktion des Visual Studio-Editors verwenden. |
Weitere Informationen zur Verwendung des Befehls Umschließen mit finden Sie unter Gewusst wie: Verwenden von umschließenden Codeausschnitten.
Konvertieren von deklarativen typisierten Datasets
Wenn sich im App_Code-Ordner des Visual Studio 2008-Websiteprojekts stark typisierte DataSet-Klassen befinden, muss in einem zusätzlichen Schritt das connectionString-Element in der Datei Web.config korrigiert werden. Zusätzlich muss das connectionString-Element in der DataSet-Klasse für jedes TableAdapter-Objekt zurücksetzt werden.
So korrigieren Sie die connectionString von stark typisierten DataSets
Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die DataSet-Klasse im Ordner App_Code, und klicken Sie anschließend auf Ansicht-Designer.
Das Fenster Designer wird für das DataSet angezeigt.
Hinweis: Wenn die DataSet-Verbindung konfiguriert ist, können Sie auf das DataSet doppelklicken, um es im Designer anzuzeigen.
Klicken Sie mit der rechten Maustaste auf ein TableAdapter-Objekt, und klicken Sie dann auf Eigenschaften.
Wählen Sie die Connection-Eigenschaft aus, und setzen Sie die Verbindung zurück, indem Sie eine verfügbare Option auswählen.
Wenn Sie die Verbindung aktualisieren, wird der Verweis der Verbindungszeichenfolge ebenfalls aktualisiert.
Wiederholen Sie diese Schritte für jedes TableAdapter-Objekt in jedem DataSet.
Konvertieren von Profilobjektcode
ASP.NET 2.0 bietet Unterstützung für Profileigenschaften. Dieses Feature ermöglicht es Ihnen, Benutzerprofildaten in einer Personalisierungsdatenbank zu speichern und abzurufen. In Visual Studio 2008-Websiteprojekten wird von ASP.NET automatisch ein Profile-Objekt (eine Instanz der ProfileCommon-Klasse) zu jeder ASP.NET-Webseite des Projekts hinzugefügt. Dieses Objekt stellt einen stark typisierten Zugriff auf alle im Profilabschnitt der Anwendungsdatei Web.config definierten Eigenschaften bereit. Sie können IntelliSense-Daten für dieses Objekt abrufen und automatisch Werte daraus abrufen und speichern.
Die Web.config-Datei einer Anwendung könnte beispielsweise den folgenden Abschnitt enthalten.
<profile defaultProvider="AspNetSqlProfileProvider">
<properties>
<add name="Teachers"
type="Teachers"
allowAnonymous="true" />
</properties>
</profile>
In diesem Fall kann einer Seite der Code des folgenden Beispiels hinzugefügt werden, um Informationen über das Teachers-Objekt abzurufen und zu speichern.
public partial class _Default : System.Web.UI.Page
{
protected void Button1_Click(object sender, EventArgs e)
{
Teachers teachers = new Teachers();
teachers.Add(new Teacher("Scott"));
teachers.Add(new Teacher("Bob"));
teachers.Add(new Teacher("Paul"));
Profile.Teachers = teachers;
}
protected void Button2_Click(object sender, EventArgs e)
{
GridView1.DataSource = Profile.Teachers;
GridView1.DataBind();
}
}
Partial Public Class _Default
Inherits System.Web.UI.Page
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
Dim teachers As New Teachers()
teachers.Add(New Teacher("Scott"))
teachers.Add(New Teacher("Bob"))
teachers.Add(New Teacher("Paul"))
Profile.Teachers = teachers
End Sub
Protected Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
GridView1.DataSource = Profile.Teachers
GridView1.DataBind()
End Sub
End Class
Das Visual Studio 2008-Webanwendungsprojekt enthält nicht automatisch die ProfileCommon-Klasse. Sie können jedoch Ihre eigene ProfileCommon-Klasse erstellen, die stark typisierte Eigenschaften für die im Profilsystem konfigurierten Elemente enthält. Anschließend können Sie auf die aktuelle Profile-Eigenschaft des HttpContext-Objekts zugreifen, um die Eigenschaften abzurufen bzw. festzulegen. Im folgenden Beispiel wird eine benutzerdefinierte ProfileCommon-Klasse erstellt, die in der Datei Class1.cs (Class1.vb für Visual Basic) enthalten ist.
using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Web.Profile;
namespace WebApplication1
{
public class ProfileCommon
{
public Teachers Teachers
{
get
{
return (Teachers) HttpContext.Current.Profile.GetPropertyValue("Teachers");
}
set
{
HttpContext.Current.Profile.SetPropertyValue("Teachers",value);
}
}
}
}
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.Web
Imports System.Web.Profile
Namespace WebApplication1
Public Class ProfileCommon
Public Property Teachers() As Teachers
Get
Return DirectCast(HttpContext.Current.Profile.GetPropertyValue("Teachers"), Teachers)
End Get
Set(ByVal value As Teachers)
HttpContext.Current.Profile.SetPropertyValue("Teachers", value)
End Set
End Property
End Class
End Namespace
Schließlich können Sie den Seiten, die das Profilsystem verwenden müssen, eine Instanz der ProfileCommon-Klasse mit dem Namen Profile hinzufügen, wie im folgenden Beispiel gezeigt.
public partial class _Default : System.Web.UI.Page
{
ProfileCommon Profile = new ProfileCommon();
protected void Button1_Click(object sender, EventArgs e)
{
Teachers teachers = new Teachers();
teachers.Add(new Teacher("scott"));
teachers.Add(new Teacher("bob"));
teachers.Add(new Teacher("paul"));
Profile.Teachers = teachers;
}
protected void Button2_Click(object sender, EventArgs e)
{
GridView1.DataSource = Profile.Teachers;
GridView1.DataBind();
}
}
Public Partial Class _Default
Inherits System.Web.UI.Page
Public Profile As New ProfileCommon()
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim teachers As New Teachers()
teachers.Add(New Teacher("scott"))
teachers.Add(New Teacher("bob"))
teachers.Add(New Teacher("paul"))
Profile.Teachers = teachers
End Sub
Protected Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs)
GridView1.DataSource = Profile.Teachers
GridView1.DataBind()
End Sub
End Class
Auf der Seite muss kein weiterer Code geändert werden, und das Profilsystem lässt sich wie im ursprünglichen Websiteprojekt verwenden. Weitere Informationen finden Sie unter Übersicht über ASP.NET-Profileigenschaften.
Siehe auch
Aufgaben
Gewusst wie: Verwenden von umschließenden Codeausschnitten
Konzepte
Webprojektkonvertierung aus Visual Studio .NET
Übersicht über ASP.NET-Profileigenschaften