2010-03-31 7 views
11

Ich möchte eine Klassenbibliothek (eine einzelne DLL-Datei) in einer Produktions-Webanwendung aktualisieren. Diese Web-App ist vorkompiliert (veröffentlicht). Ich habe eine Antwort auf StackOverflow gelesen (Sorry, ich kann es nicht mehr finden, weil die Suchfunktion nicht sehr gut funktioniert), was mich dazu gebracht hat zu glauben, dass ich die neue DLL einfach in den bin-Ordner einfügen könnte ohne Probleme (dies würde den WP zum Recycling bringen, was für mich in Ordnung ist, da wir den InProc-Sitzungsstatus nicht verwenden).Aktualisieren einer DLL in einer Produktions-ASP.NET-Website bin-Ordner

Wenn ich dies jedoch versuchte, explodierte meine Site und gab eine FileLoadException, die besagt, dass die Manifestdefinition der Assembly nicht mit der Assemblyreferenz übereinstimmt. Was in der Welt ist das ?! Das Aktualisieren der DLL in Visual Studio und das erneute Bereitstellen der gesamten Site funktioniert einwandfrei, aber es ist ein großer Schmerz im Hintergrund. Was ist der Sinn einer separaten DLL, wenn Sie die gesamte Site erneut bereitstellen müssen, um Änderungen implementieren zu können?

Hier ist die Frage: Wie kann ich eine DLL auf einer Produktionswebsite aktualisieren, ohne die App zu unterbrechen und ohne alle Dateien erneut zu implementieren?

+0

Dies ist übrigens eine "Website" in Visual Studio. Nicht sicher, ob das einen Unterschied macht oder nicht. –

Antwort

9

Das ist daran zu erinnern ist, dass es Websites und Webanwendungen so weit wie Visual Studio und ASPNET angesehen wird.

Websites haben in der Regel alle aspx- und vb-Dateien auf dem Live-Server veröffentlicht und ASPNET Worker Process kompiliert die App jedes Mal vor der Präsentation neu.

Am anderen Ende ist die Web-Anwendung, wo alle Ihre Code hinter Dateien kompiliert werden in eine einzige DLL-Datei und Sie einfach Ihre ASPX-Seiten und Sie bin-Ordner mit der DLL-Datei zur Produktion bereitstellen.

Es gibt auch eine "hybrid" bekannt als "Precompiled Web Sites" (siehe den Link für die offizielle MSDN-Übersicht), wo Sie nicht die einzelnen DLL-Layout einer Webanwendung haben, aber die gesamte Kompilierung der Website ist für dich gemacht. Je nach Ihren Bedürfnissen gibt es verschiedene "Modi".

Es scheint mir, dass Ihr Fehler verursacht wird, weil Ihre Website als eine Website mit einer Art von Precompilation eingerichtet ist. Die Verwendung des vorkompilierten Modells ist etwas "strikter", da angenommen wird, dass bestimmte Dateien/Signaturen vorhanden sind. Eine aktualisierte Version der DLL-Datei verursacht eine Pause, da die Vorkompilierung einen Namen und eine Version der Datei benötigt.

Wenn möglich, wäre die beste Lösung eine Konvertierung in eine Webanwendung, da Sie die zusätzlichen DLLs ohne Probleme in die Produktion einbinden können. Schauen Sie sich andernfalls this matrix an, um zu sehen, welche Form der Vorkompilierung Sie für Ihre Anwendung benötigen.

+0

+1 Danke, das ist eine gute Antwort. Ich bin immer noch etwas verwirrt bei der Konvertierung von Webanwendungen. Was genau ist mit "Umwandlung in eine Webanwendung" verbunden? Danke noch einmal! –

+0

Sie sollten in der Lage sein, mit der rechten Maustaste auf die Projektdatei zu klicken und "Convert to Web Application" auszuwählen, und es wird den Prozess für Sie erledigen. –

+0

Ich habe nicht die Option "In Webanwendung konvertieren" in meinem Kontextmenü des Lösungs-Explorers. Ich habe VS2008 Professional Edition. Ich bin nicht blind, es ist einfach nicht da! Gibt es eine Art Add-on, die ich dafür brauche? Vielen Dank. –

1

Schauen Sie sich diese SO-Post an, vielleicht, worauf Sie sich beziehen. The located assembly's manifest definition does not match the assembly reference

+0

Das ist nicht der eine. Es hatte eine Antwort, die etwas zu dem Effekt von "Ja, nur um Ihre neue DLL in den Ordner bin fallen lassen und es wird den App-Pool recyceln und abgeholt werden." Es war eine akzeptierte Antwort und wurde einige Male gewählt. Ich habe einen Kommentar zu der Antwort zu FileLoadException hinterlassen. –

0

Werfen Sie einen Blick auf Ihre Referenz. Sagt es "spezifische Version = wahr"? Setzen Sie es auf "false", veröffentlichen Sie Ihre App erneut (Sie müssen es einmal tun, da Ihre App immer noch nach einer Assembly mit einem bestimmten Manifest sucht) und versuchen Sie es erneut.

+0

Wo finde ich diese "spezifische Version"? –

+0

In den Referenzeigenschaften. Erweitern Sie Verweise, klicken Sie mit der rechten Maustaste auf den Verweis, klicken Sie auf Eigenschaften. –

+0

Ich kann nicht finden, worüber du sprichst.Dies ist eine Website, keine Webanwendung. –