deployment Die Visual Studio 2010-Veröffentlichungs-Webfunktion enthält nicht alle DLLs




visual-studio-2010 asp.net-mvc-2 (11)

Ich habe dieses Problem als einen Fehler bei Microsoft Connect erstellt. Wenn es jemand erlebt, der es bewerten könnte, https://connect.microsoft.com/VisualStudio/feedback/details/637071/publish-web-feature-not-including-all-dlls dann werden wir hoffentlich etwas dagegen tun.

Ich habe eine ASP.NET MVC 2-Anwendung.

  • Webprojekt enthält einen Verweis auf SomeProject
  • SomeProject enthält Verweise auf ExternalAssembly1 und ExternalAssembly2.
  • SomeProject ruft explizit ExternalAssembly1, aber nicht ExternalAssembly2 auf.
  • ExternalAssembly1 ruft ExternalAssembly2 auf

Wenn ich einen lokalen Build mache, ist alles cool. Alle DLLs sind im Ordner bin \ debug enthalten. Das Problem besteht darin, dass bei Verwendung des Befehls Web veröffentlichen in Visual Studio 2010 alles außer ExternalAssembly2 bereitgestellt wird.

Es scheint, Assemblys zu ignorieren, die nicht direkt verwendet werden (denken Sie daran, dass ExternalAssembly2 nur von ExternalAssembly1 verwendet wird).

Kann ich Visual Studio 2010 sagen, dass es ExternalAssembly2 enthält?

Ich kann eine Dummy-Methode schreiben, die in ExternalAssembly2 aufruft. Das funktioniert, aber ich möchte Dummy-Code wirklich nicht zu dem einzigen Zweck verwenden, VS2010 zu verursachen, die DLL zu veröffentlichen.


Ich hatte das gleiche Problem mit VS2010 und einer WCF-Dienstanwendung.

Es stellt sich heraus, dass, wenn Ihre DLLs (direkt oder indirekt) auf GAC bereitgestellt werden, die VS-Veröffentlichungsfunktion diese ausschließt. Nachdem ich die Assemblys aus GAC entfernt hatte, funktionierte das Veröffentlichungsfeature wie erwartet.

Ich nehme an, dass VS davon ausgeht, dass sich Ihre Assemblys, wenn sie auf dem von Ihnen erstellten Computer in GAC gespeichert werden, ebenfalls auf dem Zielcomputer in GAC befinden. Zumindest in meinem Fall ist diese Annahme falsch.


Ich habe das gleiche Problem (verschiedene Baugruppen). Wenn ich auf die Assemblys in meinem Webprojekt referenziere, werden sie in die Publish-Ausgabe einbezogen, sollten aber trotzdem einbezogen werden, da es sich um indirekte Abhängigkeiten handelt:

Web Projekt ---> Versammlung A ---> Versammlung B

Beim Build werden die Assemblies A und B in den Ordner \ bin ausgegeben. Bei Veröffentlichung wird nur Assembly A an den Veröffentlichungsordner ausgegeben.

Ich habe versucht, die Veröffentlichungseinstellungen so zu ändern, dass alle Dateien in das Webprojekt aufgenommen werden, aber dann habe ich Dateien in meiner Veröffentlichungsausgabe, die nicht bereitgestellt werden sollten.

Das scheint mir ein Fehler zu sein.


Ich hatte heute dasselbe Problem. Ich habe mein Webprojekt veröffentlicht und festgestellt, dass nicht alle Referenz-DLLs vorhanden sind. Insbesondere verweist die indirekte DLL.

Es stellt sich heraus, dass das Verzeichnis, in dem ich veröffentlichte, nicht mehr über Speicherplatz verfügte (Netzwerkfreigabe). Ich hatte gerade genug Platz, um alle Dateien außer einigen indirekten Referenz-DLLs zu veröffentlichen. Der traurige Teil ist, dass VS08 keine Fehler geworfen hat. Es hat gerade veröffentlicht die Dateien sind üblich. Ich räumte etwas Festplattenplatz und alles hat gut funktioniert.

Ich habe den Festplattenplatz nicht gefunden, bis ich versucht habe, die DLLs manuell zu verschieben.



Meine Tests zeigen, dass die externen Assemblies veröffentlicht werden, wenn ich eine Referenz auf sie im Webprojekt habe. Ich muss keinen Dummy-Code schreiben, damit es funktioniert. Das scheint mir akzeptabel zu sein.

Ich stimme Nicholas zu, dass dies ein Fehler im Visual Studio zu sein scheint. Zumindest entgeht mir, was der Grund für das Verhalten sein könnte.


Wenn Sie in die ExternalAssembly2-Referenzeigenschaftsliste gehen und das "Copy Local" in "True" ändern, denke ich, dass das Ihr Problem lösen könnte.


Ich weiß nicht, ob Sie das noch beobachten, aber ich fand die Lösung (ich hatte genau das gleiche Problem) über diesen MSDN-Artikel . Unter "Build-Aktion" für die Datei wählen Sie "Inhalt", die es in die Liste der Dateien aufnehmen soll, die Veröffentlichung bringt.



in meinem Fall ist es ziemlich schwierig. Der Verweis auf ExternalAssembly2 ist nicht erforderlich, um das Projekt zu erstellen, ist aber für die Laufzeit wichtig, da wir zur Konfiguration des Unity-Containers die Reflektion verwenden. Also, ich lösche die Referenz - bauen Sie das Projekt erfolgreich, aber Laufzeitfehler. Wenn ich die Referenz aufbewahre, kann ich die Anwendung erstellen und ausführen, aber ich kann sie nicht mit ExternalAssembly2 veröffentlichen - bekomme auch eine Laufzeit-Ausnahme. Dies geschieht aufgrund der internen VS2010-Baugruppenoptimierung.

Also, was können wir hier machen? 1. Setzen Sie einen nicht benötigten Code, um die Klasse von ExternalAssembly2 zu verwenden. 2. Flucht aus der Reflexion und Verwendung statischer Verknüpfungen.

Hoffe das hilft smbd.


Copy local hat den Trick gemacht. Ich hatte ein Problem, dass die Newtonsoft.Json-Assembly im deploymeny-Paket enthalten ist. Copy local wurde auf false gesetzt.





msdeploy