Für den Fall, dass die Frage nicht klar war. Ich habe 3 MVC-Projekte in einer Lösung. Jedes Mal, wenn ich ein neues Projekt erstelle, wird der Ordner "Scripts" mit allen .js-Dateien hinzugefügt, die ich jemals benötigen werde. Ich möchte nicht, dass dies jedes Mal für jede Anwendung erstellt wird. Gibt es eine Möglichkeit, Skripte aus einem zentralen Ordner in der Lösung zu referenzieren, damit alle Anwendungen / Projekte einen gemeinsamen Skriptordner mit allen ihnen gemeinsamen Skripten gemeinsam nutzen können?
Bearbeiten: Bitte erläutern Sie die Vor- und Nachteile, wenn es welche gibt ... jetzt bin ich neugierig.
Antworten:
Folgendes würde ich empfehlen:
Klicken Sie mit der rechten Maustaste auf die Lösung und erstellen Sie einen neuen Lösungsordner mit dem Namen
Common Javascript Files
(oder wie auch immer Sie ihn aufrufen möchten).Klicken Sie mit der rechten Maustaste auf die Lösung, klicken Sie im Windows Explorer auf Ordner öffnen , oder navigieren Sie dort manuell zu anderen Versionen von Visual Studio :(
Erstellen Sie im Lösungsverzeichnis ein Verzeichnis mit demselben Namen wie der Lösungsordner (Lösungsordner stimmen normalerweise nicht mit Verzeichnissen auf Quellcodeebene überein, dies dient jedoch der Vernunft).
Fügen Sie in diesem neuen Verzeichnis Dateien hinzu, die von Lösungen gemeinsam genutzt werden müssen.
Klicken Sie in Visual Studio auf den Lösungsordner und wählen Sie Hinzufügen - Vorhandenes Element .
Navigieren Sie im Dialogfeld zur Dateiauswahl zu dem zuvor erstellten Verzeichnis, wählen Sie die dem Verzeichnis hinzugefügten Dateien aus und klicken Sie auf Hinzufügen .
Klicken Sie in jedem Projekt, das eine freigegebene Datei benötigt, mit der rechten Maustaste auf das Projekt (oder das Verzeichnis innerhalb des Projekts) und klicken Sie auf Hinzufügen - Vorhandenes Element .
Navigieren Sie zum freigegebenen Verzeichnis, wählen Sie die Dateien aus, klicken Sie auf den Dropdown-Pfeil und dann auf Als Link hinzufügen .
Jetzt sind die Dateien in den Projekten im Wesentlichen Verknüpfungen zu den Dateien im Lösungsordner. Sie werden jedoch als tatsächliche Dateien im Projekt behandelt (dies schließt CS- oder Visual Basic-Dateien ein. Sie werden als Dateien kompiliert, die tatsächlich im Projekt vorhanden sind).
PROS
Nachteile
quelle
Das Beste, imo, ist, ein eigenes CDN zu erstellen ... Erstellen Sie einfach eine andere Site in IIS und geben Sie ihr eine eigene Bindung, z. B. "http://cdn.somedomain.com".
Speichern Sie dann alle Ihre CSS / JS / Schriftarten / freigegebenen Bilder usw. auf der CDN-Site und verlinken Sie sie von Ihren anderen Sites aus.
Dies löst 2 Probleme,
Ich habe diese Antwort hinzugefügt, weil ich sehe, dass viele Leute beim Erstellen virtueller Verzeichnisse referenzieren. Während dies die Dateien tatsächlich gemeinsam nutzt, werden mehrere Download-Pfade für sie erstellt, was eine extreme Verschwendung von Bandbreite darstellt. Warum sollten Ihre Benutzer jquery.js (1 * Anzahl von Websites) herunterladen, wenn Sie ihnen erlauben können, es einmal auf (cdn.somedomain.com) herunterzuladen?
Auch wenn ich Bandbreitenverschwendung sage, spreche ich nicht nur über Serverbandbreite, sondern auch über mobile Benutzer in Datenplänen ... Als Beispiel habe ich die HR-Site unseres Unternehmens (Versicherung usw.) auf meinem Telefon auf der anderen Seite aufgerufen Tag und es verbrauchte 25 MB direkt aus dem Tor, lud JQuery und ein paar Sachen jeweils 5 Mal herunter ... Auf einem 2 GB pro Monat Datenplan, Websites, die das tun, nerven mich wirklich.
quelle
Hier ist es, IMO die beste und einfachste Lösung. Ich habe eine Woche lang versucht, den besten und einfachsten Weg zu finden, der immer mehr Nachteile als Vorteile hatte:
Resources(DLL) Shared images image.png css shared.css scripts jquery.js MvcApp1 Images Content Shared <- We want to get files from above dll here ... MvcApp2 Images Content Shared <- We want to get files from above dll here ...
Fügen Sie MvcApp1 -> Projekt -> MvcApp1-Eigenschaften -> Build-Ereignisse -> Post-Build-Ereignis Folgendes hinzu:
start xcopy "$(SolutionDir)Resources\Shared\*" "$(SolutionDir)MvcApp1\Shared" /r /s /i /y
Hier finden Sie eine Erläuterung der Funktionsweise: Einschließlich des Verzeichnisses der Inhaltsdateien zum Erstellen von Aktionen aus der Assembly, auf die verwiesen wird, auf derselben Ebene wie das Verzeichnis bin
Machen Sie dasselbe für MvcApp2. Jetzt werden nach jedem Build neue statische Dateien in Ihre App kopiert und Sie können auf Dateien wie "~ / Shared / css / site.css" zugreifen.
Wenn Sie möchten, können Sie den obigen Befehl anpassen, um Skripte von .dll in den Skriptordner jeder App zu kopieren. Auf diese Weise können Sie einige Skripte in .dll verschieben, ohne Pfade ändern zu müssen. Hier ein Beispiel:
Wenn Sie nach jedem Build nur Skripte aus Resources / Shared / scripts in MvcApp1 / scripts kopieren möchten:
start xcopy "$(SolutionDir)Resources\Shared\Scripts\*" "$(SolutionDir)MvcApp1\Scripts" /r /s /i /y
quelle
$(SolutionDir)
nach Abschluss der Ausführung zu löschen? Wenn Sie sie dort lassen, können andere Entwickler verwirrt werden. 3) Sie haben (DLL) in Klammern nach dem Ordner "Ressourcen". Gibt es eine spezielle Möglichkeit, dies einzurichten?Dies ist eine späte Antwort, aber Microsoft hat einen Projekttyp namens "
Shared Project
Start" hinzugefügtVisual Studio 2013 Update 2
, der genau das kann, was Sie nicht wollen, ohnelink
Dateien zu benötigen ."In früheren Versionen von Visual Studio konnten Sie den Quellcode zwischen Projekten freigeben, indem Sie Hinzufügen -> Vorhandenes Element hinzufügen und dann Verknüpfung auswählen. Dies war jedoch etwas umständlich, und jede einzelne Quelldatei musste einzeln ausgewählt werden. Um mehrere zu unterstützen Auf unterschiedlichen Plattformen (iOS, Android usw.) haben sie beschlossen, die gemeinsame Nutzung von Quellen zwischen Projekten zu vereinfachen, indem sie das Konzept der gemeinsamen Projekte hinzugefügt haben. "
https://blogs.msdn.microsoft.com/somasegar/2014/04/02/visual-studio-2013-update-2-rc-windows-phone-8-1-tools-shared-projects-and-universal- Windows-Apps /
Infos von diesem Thread:
Was ist der Unterschied zwischen einem freigegebenen Projekt und einer Klassenbibliothek in Visual Studio 2015?
https://stackoverflow.com/a/30638495/3850405
quelle
Ein Vorschlag, mit dem Sie Ihre Skripte debuggen können, ohne das Projekt neu zu kompilieren:
Auf diese Weise können Sie die Skripte im " Master " -Projekt ändern, ohne den Debugger neu zu starten, was für mich den Unterschied ausmacht.
quelle
Erstellen Sie in IIS einen virtuellen Ordner, der für jede der drei Anwendungen auf denselben Skriptordner verweist. Dann müssen Sie sie nur noch in einer einzigen Anwendung aufbewahren. Es gibt andere Alternativen, aber es hängt wirklich davon ab, wie Ihre Anwendungen strukturiert sind.
Bearbeiten
Eine beängstigendere Idee ist die Verwendung von Bereichen. In einem gemeinsamen Bereich haben Sie ein Skriptverzeichnis mit den zu kompilierenden Skripten. Dann servieren Sie sie selbst, indem Sie sie aus der DLL entfernen. Dies ist möglicherweise eine gute Idee, wenn Sie davon ausgehen, dass der Gemeinschaftsbereich später mehr Funktionen bietet.
quelle
Die meisten standardmäßig enthaltenen Dateien sind auch über verschiedene CDNs verfügbar.
Wenn Sie keine eigenen benutzerdefinierten Skripte hinzufügen, benötigen Sie möglicherweise nicht einmal ein Skriptverzeichnis.
Microsofts CDN für Skripte: http://www.asp.net/ajaxlibrary/cdn.ashx
quelle