2010-01-20 5 views
7

Ich erben etwas ASP.NET-Code (Ich bin ein OS-Typ, kein Web-Entwickler (noch ;-)). Die Lösung wurde überarbeitet und es gibt mehrere Projekte (Bibliotheken und ASP.net-Sites) darin. Neben den Bibliotheken gibt es zwei asp.net-Projekte (genannt MAINSITE und SUBSITE). Nur MAINSITE wird als offizielle Site (als asp.net-Site) verwendet, und MAINSITE hängt vom Code auf der ASP.NET-Site von SUBSITE ab, verwendet jedoch nicht die Site selbst. Ich versuche herauszufinden, wie man das aufräumt und SUBSITE in eine Bibliothek umwandelt.Was macht ein ASP.NET-Projekt eine Anwendung vs Bibliothek?

Meine schnelle Frage ist, wenn ich die MAINSITE debuggen (als Standard), führt es zwei asp.net Prozesse: MAINSITE und SUBSITE. Und wie kann ich das zumindest vermeiden? Gibt es eine schnelle/vorübergehende Lösung?

Meine detaillierte Frage ist:

Was für eine asp.net Website einer asp.net Website macht? Zum Beispiel könnte in C der Unterschied zwischen einer DLL und EXE (oberflächlich sowieso) definiert werden als das Vorhandensein einer Haupt- und potentiellen Exportinformation für die Bibliothek (unter anderem natürlich). Wenn ich eine exe in dll konvertieren würde, könnte ich: 1. Entfernen Sie den Hauptcode 2. Stellen Sie sicher, dass die öffentliche Schnittstelle korrekt war (und ordnungsgemäß exportiert) 3. Konvertieren Sie das Makefile, um eine DLL anstelle einer exe zu erstellen.

Kann mir jemand auf einige ähnliche Schritte für asp.net zu .net lib? Vielleicht: 1. loswerden index.aspx 2. loswerden web.config 3. alle * .cs Dateien zu entfernen? 4. Wie ändere ich die Eigenschaften? 5. irgendwelche gotchas?

Vielen Dank für Ihre Hilfe. Details: Visual Studio 2008/.NET 3.5

+0

In Bezug auf Ihre schnelle Frage, es klingt wie es mehrere Start-Projekte konfiguriert sind. Klicken Sie mit der rechten Maustaste auf Lösung, Eigenschaften und wählen Sie dann ein einzelnes Startprojekt mit der Option MAINSITE im Dropdown-Menü aus. – jamesaharvey

Antwort

3

Es gibt viele, viele Komponenten, um eine Anwendung als ASP.Net-Anwendung auszuführen. Im Hinblick auf Ihr tatsächliches Webanwendungsprojekt gibt es jedoch keinen großen Unterschied zwischen dem generischen Bibliothekscode und der Tatsache, dass ein Großteil Ihres Codes von der Existenz der HttpApplication-Laufzeit abhängt.

Jeder Code, der das System.Web (insbesondere System.Web.UI) verwendet, wird in Bezug auf diese Abhängigkeit verdächtig sein. Zum Beispiel hängt der gesamte Code in Seiten- oder Webcontrol-Event-Handlern (Init, Load, PreRender usw.) davon ab, dass ein HttpHandler (der in einer HttpApplication läuft) diese Ereignisse auslöst. Wenn Sie dasselbe WebControl aus einer Bibliothek ausführen, die sich nicht in einem ASP.Net-Projekt befindet, wird nichts davon passieren und das Steuerelement wird nutzlos sein. Diese exakt gleiche Bibliothek wäre jedoch ziemlich funktionsfähig, wenn sie im Kontext eines ASP.Net-Prozesses ausgeführt würde.

Es läuft wirklich darauf hinaus, in welchem ​​Prozess Sie die Bibliothek ausführen. In den meisten Fällen werden ASP.Net-Prozesse von IIS erstellt, obwohl es möglich ist, einen ASP.Net-Prozess auch in anderen Arten von Programmen zu hosten .

Es gibt leider keinen einfachen 5-Schritte-Prozess, um ein Webprojekt in eine Bibliothek umzuwandeln. Aber als Faustregel, webcontrols, .aspx und.Ascx Codebehind wird nicht konvertieren.

Für einen detaillierteren Blick auf, was Code in ein ASP.Net-Programm macht, siehe Rick Strahls "A Low level look at ASP.Net".

3

Wenn Sie zu "Datei"> "Neu"> "Neues Projekt ..." gehen und dann auf (vorausgesetzt, Sie verwenden C#) "Visual C#" In der Liste auf der linken Seite können Sie ein "Klassenbibliothek" -Projekt erstellen. Sie können den gesamten relevanten Code zu einem von diesen extrahieren und dann in Ihrem "MAINSITE" referenzieren.

Sie müssen im Abschnitt "Referenzen" Ihres MAINSITE-Projekts darauf verweisen und müssen möglicherweise Ihr Bibliotheksprojekt mit dem Schlüsselwort import importieren.

+1

Yup - Dies wird wahrscheinlich viel sauberer als der Versuch, SUBSITE in eine Klassenbibliothek zu konvertieren. – cwap

+2

Das würde nur funktionieren, wenn seine "Untersite" nur Klassen oder andere "Code" -Dateien enthält. Dinge wie ASPX- und ASCX-Dateien hängen von der ASP.NET-Kompilierung ab und würden wahrscheinlich nur als eingebettete Ressource in einer regulären Klassenbibliothek referenziert werden. –

+0

Nun, er sagte der "Website" Teil der SUBSITE wird nicht verwendet, nur einige der Code-Dateien ... das ist, warum ich diese Methode vorgeschlagen. – Jason