it-swarm.com.de

Wie konvertiert man eine ASP.NET-Website in eine ASP.NET-Webanwendung?

Ich habe eine ASP.NET 3.5-Website (Visual Studio Lingue), aber die Website wächst weiter und sieht unter anderem ziemlich cowboyhaft aus. Ich möchte, dass dies in eine Webanwendung (Namespaces und alle) konvertiert wird.

Ist dies etwas, das in Visual Studio leicht gemacht werden kann? Wenn nicht, gibt es noch andere Tools, die alle Namespaces usw. automatisch erstellen könnten?

80
RSolberg

Nun, es stellt sich heraus, dass die Option "In Webanwendung konvertieren" für "Websites" NICHT existiert. Die Option "In Webanwendung konvertieren" gibt es nur für "Webanwendungen" !!!! 

[Hervorhebungsmine]

Also, hier ist der Deal, die Konvertierung, müssen Sie:

  • Fügen Sie Ihrer VS 2008-Lösung eine neue "Webanwendung" hinzu (Datei-> Hinzufügen-> Neu Projekt-> C # -> Web-> ASP.NET Web Anwendung).

  • Anschließend kopieren Sie alle Dateien der alten "Website" in Ihre neue erstellt "Webanwendung" und Überschreiben Sie alle darin erstellten Dateien mit Standard

  • Der nächste Schritt ist der hässlichste, Sie müssen die Verweise .__ manuell hinzufügen. in Ihrer "Website" zur neuen "Web Anwendung". Ich dachte die VS 2008 PowerCommands-Spielzeug würde dies für mich tun da kopiert es Referenzen von anderen Projekttypen, aber nicht. Du hast um es selbst zu machen, manuell und Sie müssen in diesem Schritt vorsichtig sein wenn Sie mehrere Versionen von .__ haben. dieselbe Assembly (wie AJAXToolkit in meinem Fall) oder Assemblys, die beide GAC .__ haben. und lokale Versionen oder so.

  • Wiederholen Sie den letzten Schritt und versuchen Sie, die "Webanwendung" zu erstellen . Sie erhalten immer wieder Fehler wie "" .... "ist unbekannter Namespace. Fehlt Ihnen .__ eine Assembly-Referenz?". Machen Sicher haben Sie keine davon außer der Diejenigen, bei denen "...." durch ".__" ersetzt wird. IDs der Serversteuerelemente, die Sie verwenden. Im Mit anderen Worten, fügen Sie weitere Verweise hinzu und das Projekt nur bis auf die Fehler, die wegen .__ vorhanden sind. fehlt .DESIGNER.CS oder .DESIGNER.VB Dateien.

  • Wechseln Sie anschließend in VS .__ zum Stammprojektknoten "Webanwendung". 2008 Solution Explorer und rechts Klicken Sie darauf, dann finden Sie das Option "In Webanwendung konvertieren" . Was diese Option macht, ist eigentlich kleine Änderungen an der "@Page" und "@Control" Direktiven der Seiten und Steuerelemente und Erstellen der erforderlichen .DESIGNER.CS- oder .DESIGNER.VB-Dateien.

  • Versuchen Sie erneut, die "Webanwendung" zu erstellen. Wenn Sie Fehler erhalten, sehen Sie, was Referenzen können fehlen und/oder gehen Klicken Sie auf "In Webanwendung konvertieren" nochmal. Manchmal, wenn ein Fehler aufgetreten ist andere als die fehlenden DESIGNER-Dateien, nicht alle Seiten/Steuerelemente haben diese DESIGNER-Dateien, die für sie erstellt wurden . Behebung des Nicht-DESIGNER-Problems und Klicken Sie auf "In Webanwendung konvertieren" sollte wieder den Job machen.

  • Wenn Sie mit dem erfolgreichen VS-Build fertig sind, sollten Sie bereit sein . Testen Sie Ihre Webanwendung . Optional können Sie mit der rechten Maustaste auf .__ klicken. Wurzelprojektknoten "Webanwendung" in VS 2008 Solution Explorer und klicken Sie auf "Eigenschaften" gehen Sie dann auf die Registerkarte "Web" um die "Webanwendung" auf eine .__ einzustellen. virtueller Ordner in IIS (Sie können von dort aus in VS ein neues virtuelles Verzeichnis erstellen). Wenn Sie den IIS verwenden möchten virtuelles Verzeichnis, das der alte "Website" verwendet, müssen Sie .__ entfernen. das von IIS zuerst.

  • Update: Bezahlen Sie beim Testen Ihrer Seiten die meisten Aufmerksamkeiten an die Klassen in "App_Code" Ordner, insbesondere die mit NO NAMESPACE. Das kann ein großer .__ sein. Falle. Wir hatten ein Problem mit zwei Erweiterungsmethode überlädt in derselben statische Klasse, die keinen Namespace hatte, eine verlängert DateTime? (Nullwert) und nennt eine weitere Überladung, die verlängert DateTime selbst. Aufruf des andere Überladung als Erweiterungsmethode VS 2008 Compilation bestanden und gab uns ein Kompilierungsfehler NUR IN RUNTIME (Mit IIS). Ändern des Anrufs in die andere Überladung vom Aufruf als Erweiterungsmethode für den Aufruf als normale statische Methode (nur Aufruf von des Aufrufs in derselben Klasse, Aufrufe von andere Klassen blieben Erweiterung Methodenaufrufe) löste diese, aber klar, es ist nicht so sicher, wie es verwendet wurde in VS 2005 zu sein. Besonders mit Klassen ohne Namespaces.

  • Update2: Während der Konvertierung benennt VS 2008 Ihren "App_Code" in .__ um. "Old_App_Code". Dieser neue Name klingt hässlich, aber nicht umbenennen Im das "Webanwendung" -Modell, alles Code wird in einer Versammlung sein. Zur Laufzeit wird Der Webserver weiß nicht, welches Web Projekttyp, den Sie verwenden. Es tut Nehmen Sie den gesamten Code im Ordner "App_Code" und Erstellen Sie eine neue Assembly dafür. Diese So, wenn Sie Code im Ordner namens .__ haben. "App_Code", Sie erhalten am Ende RUNTIME Übersetzungsfehler, die denselben Typ haben Es gibt zwei Baugruppen, die erstellt von VS und die von IIS/ASP.NET Development Server. Zu vermeide das verlassen Sie den "Old_App_Code" mit demselben Namen oder umbenennen in ALLES AUSSER: "App_Code". Unterlassen Sie Platzieren Sie einen beliebigen Code in diesem "App_Code" Ordner und haben vorzugsweise kein Ordner mit einem solchen Namen in Ihrer "Web Anwendung" überhaupt.

Ich weiß das schon vorher, habe es aber vergessen da ich kein "Website" -Modell .__ verwendet habe. für lange :(.

97
Andrew Hare

Exemplarische Vorgehensweise: Konvertieren eines Websiteprojekts in ein Webanwendungsprojekt in Visual Studio unter MSDN

Wenn Ihre Website-Anwendung wächst, ist es besser, sie in mehrere Projekte aufzuteilen. Die Konvertierung von einem Websiteprojekt in ein Webanwendungsprojekt wird nicht viel helfen.

10

Wenn Sie Probleme beim Abrufen Ihres neuen Webanwendungsprojekts haben, prüfen Sie die Dateieigenschaften aller "Helper" -Klassen in Visual Studio. Für ein Projekt, das ich konvertierte, wurde die Build-Aktion auf Content gesetzt, während es eigentlich Compile hätte sein sollen.

4
Matt Burrell

Ich hatte anfangs die gleichen Probleme. Nachdem ich das Wrox Professional ASP.NET 4.0-Buch befolgt hatte, fand ich die folgende Lösung für meinen Fall.

Ich habe zuerst eine neue Webanwendung erstellt. Alle Website-Dateien in den Webanwendungsordner kopiert. Klicken Sie mit der rechten Maustaste auf die Anwendung und klicken Sie dann auf Webanwendung zusammenführen.

Sie werden möglicherweise gefragt, warum Sie eine Webanwendung in eine Webanwendung konvertieren müssen. Die Antwort ist, dass Sie beim Erstellen einer Website die .cs-Datei einfach wo immer erforderlich codieren. Eine Webanwendung deklariert jedoch .design.cs (oder .vb) und eine .cs-Datei für den Code und Designabschnitt automatisch.

NEXT: Entfernen Sie alle manuellen Verweise (z. B. das Attribut "Inherits") der PAGE-Direktive auf andere Dateien auf Ihrer Website, da Namensräume die Klassen zentral referenzieren.

Ich hatte auch ein Problem, da ich den OBJ- und den BIN-Ordner nicht in mein Projekt aufgenommen hatte. Wenn Sie der Meinung sind, dass Sie Ihre BIN- und OBJ-Ordner vermissen, klicken Sie einfach auf das Symbol "Alle Dateien anzeigen" im Projektmappen-Explorer und dann rechts Klicken Sie auf die fehlenden Ordner und fügen Sie sie zum Projekt hinzu. (um sicherzustellen, dass sie mit dem Projekt kompiliert werden.)

UPDATE: Wie @deadlychambers in den Kommentaren darauf hinweist: Sie können überall suchen, indem Sie "Strg + Umschalt + F" ausführen und dann nach Inherits="(.*?)" suchen. Dadurch werden alle Vorkommen gefunden und Sie sparen wahrscheinlich etwas Zeit!

3
Sunny R Gupta

Erstellen Sie eine neue Webanwendung in VS 2010. 
1. Kopieren Sie mit Windows Explorer alle Ihre Dateien in Ihren Projektordner.
2. Im VS 2010 Solution Explorer werden alle Dateien angezeigt.
3. Wählen Sie die Dateien und Ordner aus - klicken Sie mit der rechten Maustaste in das Projekt. 
4. Klicken Sie mit der rechten Maustaste auf den Projektlösungs-Explorer und wählen Sie In Webanwendung konvertieren aus.

Es gibt einige kleine Unterschiede, zum Beispiel wird der Ordner App_Code in old_app_code umbenannt - das verursacht überraschenderweise keine Fehler. Der TypeName in Ihren Objektdatenquellen und die Vererbung des @Page-Tags erfordern möglicherweise [ProjectName]. Präfix global angehängt. Wenn der Typname beispielsweise "BusinessLogic.OrderManager" lautet und der Projektname InventorySystem lautet, müssen Sie ihn in InventorySystem.BusinessLogic.OrderManager ändern. Bei einigen Anzeigeänderungen, z. B. erforderlichen Feldüberprüfungen, wird standardmäßig keine rote Schrift mehr verwendet, sondern standardmäßig schwarz. 

3
Tim Samandari

Ich habe jetzt ein Website-Projekt erfolgreich zu einer Webanwendung migriert, und es gibt ein paar Probleme, die es zu beachten gilt. 

ReSharper zur Verfügung zu haben, hilft sehr beim Refactoring der ASPX-Dateien.

  1. Richten Sie Ihre Lösung ein und erstellen Sie eine leere Webanwendung
  2. Kopieren Sie die gesamte Datei
  3. aSPX-Dateien in Website-Projekten haben keinen Namensraum. Packen Sie Ihre Klassen in die entsprechenden Namespaces ein
  4. Während des Kopierens wurden alle meine Seiten in Unterordnern in meinen Projektnamen und den Ordnernamen umbenannt, so dass ich 40ish public partial class FolderName_Projectname : Page erhielt. Falls erforderlich, alle Dateien mit Resharper oder manuell umbenennen. __ Wenn mehrere Fehler wie "There is already a member Page_Load() defined" auftreten, liegt dies höchstwahrscheinlich daran falsche Klassennamen und Duplizierung
  5. Nachdem Sie einen Namespace hinzugefügt haben
  6. Ersetzen Sie CodeFile in allen aspx-Seiten durch Codebehind und achten Sie besonders auf Dateien in Ihrem Unterordner. Stellen Sie sicher, dass Inhertis="" nicht den relativen Pfad enthält. Ihre Namespaces kümmern sich um alles. Das richtige Format ist also Inherits="Namespace.classname". Wenn Ihre Klasse einen Namespace NaSpa und einen Dateinamen foo.cs hat, wäre dies Inherits="NaSpa.foo"

  7. Nachdem Sie alle Dateien vorbereitet haben (vergessen Sie Ihre Masterseiten nicht), führen Sie "In Webanwendung konvertieren" aus. Wenn Sie anschließend auf Fehler stoßen, spülen Sie und wiederholen Sie den Vorgang. Wenn Sie Fehler der Art "TextBoxName kann nicht gefunden werden, wenn Sie einen Verweis vermissen" bemerken, stellen Sie sicher, dass Sie nicht vergessen, Ihre Aspx-Seiten zu bereinigen. Ein guter Indikator ist das Überprüfen der automatisch generierten Designer-Dateien. Wenn dort TextBoxName nicht angezeigt wird, war die Konvertierung nicht vollständig erfolgreich.

  8. Beseitigen Sie fehlende Abhängigkeiten.
  9. Bauen
2
Marco

der Standard-Namensraum ASP scheint nicht mehr zu funktionieren. Ich kann also meine User Controls.ascx-Seiten nicht von außerhalb der Seite aufrufen. Ihnen einen Namespace zu geben und die Standardeinstellung von ASP in meinen Namespace zu ändern, schien zu funktionieren.

0
Mike