Verwenden von NuGet mit * .dll.refresh-Dateien in ASP.NET "Web Site" -Projekten mit Web Deployment-Projekten

8

Wenn Sie einen ASP.NET-Website-Projekttyp haben (den ohne eine richtige .csproj- oder .vpproj-Projektdatei, und das ist nur ein Ordner mit losen Dateien), dann wird beim Hinzufügen eines Pakets mit NuGet ein * .dll.refresh-Datei im Bin-Verzeichnis, um auf die Paket-DLL im übergeordneten Paketordner zu verweisen.

Wenn Sie beispielsweise "install-package elmah" von der Package Manager Console aus ausführen, wird Elmah in den Ordner packages im Projekt-Lösungsverzeichnis und die Datei Elmah.dll.refresh im Ordner Bin des Projekts abgelegt .

Wenn ich das Projekt lokal erstelle, zieht Visual Studio automatisch die DLL ein, auf die die Aktualisierungsdatei verweist. Die Website und Elmah laufen korrekt. Ich habe die Elmah.dll-Datei, die sich im Verzeichnis des Projekts befindet, nicht in die Quellcodeverwaltung eingecheckt (nur die Aktualisierungsdatei und der Paketordner sind eingecheckt).

Ich verwende Web Deployment-Projekte jedoch, um die Site vorkompilieren und web.config-Substitutionen für Bereitstellungen durchführen. Wenn die Lösung auf diese Weise erstellt wird, wird Elmah.dll nicht automatisch in das Bin-Verzeichnis des Website-Projekts übernommen, und die Site wird aufgrund der fehlenden DLL nicht ordnungsgemäß ausgeführt.

Wie soll NuGet in diesem Szenario eingesetzt werden? Soll ich Elmah.dll im Verzeichnis Bin nachsehen?

    
Derek Morrison 12.05.2011, 10:06
quelle

3 Antworten

8

Dies basiert auf der obigen GC-Lösung. Fügen Sie eine Klassenbibliothek (csproj) hinzu und verweisen Sie auf diese Klassenbibliothek im Website-Projekt. Fügen Sie die Nuget-Pakete der Klassenbibliothek hinzu. In der Klassenbibliothek verweist tatsächlich auf die nuget-Pakete in einer Klassendatei . Vielleicht eine Wegwerf-Instanz oder etwas erstellen. Sie können jede Klasse verwenden, die im Paket enthalten ist. Dadurch wird die DLL in das Verzeichnis Bin im Websiteprojekt kopiert.

    
Ricardo Pardini 23.02.2013, 17:08
quelle
5

- EDIT - Siehe aktualisierte Version dieser Lösung oben.

Fügen Sie der Lösung einfach ein Klassenbibliotheksprojekt hinzu und fügen Sie Ihrer Website einen Verweis auf das Klassenbibliotheksprojekt hinzu.

Fügen Sie dann das nugget in der Klassenbibliothek und nicht das Website-Projekt hinzu.

Wenn Ihre Website erstellt wird, ruft sie alle Abhängigkeiten der Klassenbibliotheken auf.

    
GC. 11.05.2012 11:35
quelle
0

Ich vermute, die Vorkompilierung aktualisiert die DLLs nicht mit der .refresh-Datei - vielleicht wird das von Visual Studio erledigt.

Wenn Sie keinen Weg finden, dies zu tun, könnten Sie einen Build-Schritt erstellen, der die DLLs manuell in den bin-Ordner kopiert, oder wenn Sie versuchen, zwei Kopien der DLLs zu vermeiden, könnten Sie vielleicht einchecken der bin-Ordner und nicht die Pakete eins. Sie können NuGet.exe verwenden, um die Pakete erneut abzurufen und den Paketordner zu füllen (siehe hier und hier )

    
Danny Tuppeny 12.05.2011 16:51
quelle