2009-07-20 16 views
4

Wie werden der bin-Ordner und dlls sowie andere Ressourcendateien (wie CSS) zwischen mehreren Webanwendungen auf demselben Server gemeinsam genutzt?Gemeinsamer Code zwischen mehreren Asp.Net-Projekten

Ich habe bereits den gemeinsamen Code in ihre eigenen Baugruppen getrennt, aber ich frage mich über die Bereitstellung usw. Ich möchte im Grunde alle gemeinsamen Dateien in einem Speicherort auf dem Webserver befinden, und dann jedes Web haben App verweist auf den gemeinsamen Standort.

Momentan bin ich mir nicht sicher, wie ich einer Asp.net-Website mitteilen soll, den bin-Ordner von einem anderen Ort zu verwenden.

Wenn es einen Unterschied macht, sind dies ASP.NET MVC-Anwendungen.

Danke für Ihre Hilfe.

+0

Bitte stellen Sie nicht dieselbe Frage erneut, nur weil Sie nicht die gewünschte Antwort erhalten haben: http://stackoverflow.com/questions/1155655/asp-net-deployment-how-to-share-bin- über mehrere Webapp-Projekte hinweg. –

Antwort

1

Best Practice würde vorschlagen, Sie dies nicht tun.

Jede Anwendung ist anders, behandeln Sie sie als solche. Durch das Teilen von Ressourcen erstellen Sie eine implizite Abhängigkeit zwischen den Projekten - wenn Sie eine freigegebene Ressource ändern, ändern Sie sie für alle - unabhängig davon, ob sie beabsichtigt war oder nicht.

Wenn Sie wirklich Ressourcen teilen müssen, tun Sie es auf der Ebene der Versionskontrolle oder Builds - es ist viel einfacher, die Abhängigkeit auf dieser Ebene zu brechen, als die Abhängigkeit zu brechen, sobald Sie es auf einem Produktionsserver bereitgestellt haben.


Xanadont, mit gemeinsamen Bibliotheken usw. ist in Ordnung (das ist im Wesentlichen, was Open-Source-Projekte wie nHibernate tun), aber diesen Server auf einer Produktion von Bin-Sharing-Ordner auf der Ebene tun schafft mehr Probleme als sie löst . Die Art der Wiederverwendung, über die Sie sprechen, wird am besten angegangen, indem Sie gemeinsam genutzte Bibliotheken erstellen, bei denen es sich um unabhängige Projekte innerhalb der Quellcodeverwaltung handelt, bei denen Binärversionen verwaltet werden. Projekte, die die gemeinsam genutzten Bibliotheken verwenden möchten, verwenden dann eine binäre Abhängigkeit in der gemeinsam genutzten Bibliothek, indem sie die Binärdatei in den lib-Ordner des Quellbaums der Lösung kopieren und auf diese Binärdatei verweisen. Auf diese Weise können die gemeinsam genutzten Bibliotheken beibehalten und aktualisiert werden, ohne dass direkte Abhängigkeiten auftreten. Lösungen, die die Bibliotheken verwenden, können die Fixes/Updates auswerten, um zu ermitteln, wie sie sich auf den von ihnen abhängigen Code und auf das Upgrade auswirken ist es wert.


Scott, was Sie sich beziehen ist 1 Anwendung mit Variationen in der View-Schicht (Templates), nicht mehr als 50 Anwendungen mit Variationen in der Business-Logik. Der beste Ansatz für diese Art von Anwendung ist Multi-Tenant (ich nehme an, Sie haben 1 Datenbank pro Stadt) und verwenden die URL, um einen Kontext zu definieren, von dem aus Sie auf Ihre Datenbank zugreifen und Ihre Ansichtspfade auflösen können (schwer zu beschreiben) ein besserer Ansatz, ohne Ihre Anwendungsarchitektur besser zu verstehen).

Das Ändern von Ansichten basierend auf der URL könnte durch Implementieren einer kontextsensitiven Ansichts-Engine erfolgen (siehe http://www.coderjournal.com/2009/05/creating-your-first-mvc-viewengine/ für ein Beispiel, wie dies zu tun ist).

Mit dieser Art von Ansatz haben Sie nur einen Standort, den Sie mit Fixes aktualisieren müssen, aber Sie können einfach eine neue "Site" für eine andere Stadt erstellen, indem Sie einen neuen Satz von Vorlagen hinzufügen und (je nachdem, wie Sie Stellen Sie das Routing ein, um die neue Domain auf Ihrer Site zu platzieren. Wenn Sie über eine Reihe von Standardvorlagen verfügen, kann Ihre View-Engine sogar auf diese zurückgreifen, wenn keine Anpassungen vorhanden sind. Daher können Sie eine neue Website einrichten, indem Sie einfach auf eine neue Domäne in Ihrer Anwendung verweisen.

+3

Ich stimme nicht zu. Gemeinsame Funktionalität und Ressourcen zu teilen, ist die ganze Idee hinter Code-Bibliotheken. Aus demselben Grund verfügen Sie auch über die .Net-Plattform - eine Menge gängiger Funktionen, die in das Framework integriert sind. Warum nicht diese Idee auf allgemeine Funktionalität für Ihre Organisation erweitern? Betrachten Sie das Szenario, eine Sicherheitslücke zu schließen - tun Sie dies in der "shared resource" -Umgebung und Sie kümmern sich um alles an einem Ort. Andernfalls riskieren Sie versehentlich das Update einer Ihrer Websites zu vergessen und jetzt haben Sie ein Problem. Im schlimmsten Fall könnte das extrem gefährlich sein. – xanadont

+0

Ich teile, weil dies die gleiche Webanwendung ist, über mehrere Städte hinweg. Also, ALLE Funktionen sind gleich, aber jede Stadt wird ein leicht modifiziertes HTML-Frontend haben. Für mich ist es amateurhaft, den ganzen unveränderlichen Middle-Tier-Code zu duplizieren. Was passiert wenn ich 50 Städte habe und ich die DB ein klein wenig ändern muss? Ich muss die DLLs in 50 unabhängigen bin Ordnern aktualisieren? Mir ist klar, dass ich die Bereitstellung skripten kann, aber trotzdem ... – Scott

+1

Scott, ich würde Ihnen wärmstens empfehlen, dass Sie überdenken, wie Ihre Anwendung aufgebaut ist, und sie so umarbeiten, dass sie alle diese ähnlichen Websites unter einer einzigen Webanwendung verarbeiten kann. Mit ein wenig Code können Sie den Controller leicht auf eine andere Ansicht/Datenbank pro "Site" verweisen, so dass sie jeweils anders rendern würden, aber eigenständig verwaltet würden. –

0

Ich verwende die folgende Technik: Ich habe mehrere ASP.net-Anwendungsprojekte mit Ascx-Steuerelemente, Ressourcen und so weiter ... Ich habe virtuelle Pfadanbieter implementiert, um virtuelle Pfade zwischen diesen Anwendungen aufzulösen. Es funktioniert sehr gut. Ich habe auch spezielle http-Handler implementiert, um Dateien herunterladbar zu machen. Wenn Sie Beispiele benötigen, sehen Sie sich den Quellcode liveui an.

Verwandte Themen