Utilizzo di NuGet con i file *.dll.refresh nei progetti di "sito web" ASP.NET con progetti di distribuzione Web

StackOverflow https://stackoverflow.com/questions/5976406

Domanda

Se si dispone di un tipo di progetto del sito Web ASP.NET (quello senza un file di progetto .csproj o .vpproj corretto e questa è solo una cartella di file sciolti), quindi quando si aggiunge un pacchetto con NuGet, fa un *.dllll .Refresh File nella directory bin per fare riferimento alla DLL del pacchetto nella cartella dei pacchetti principali.

Ad esempio, se si esegue "Installa-Package Elmah" dalla console del gestore dei pacchetti, allora Elmah viene inserito nella cartella dei pacchetti nella directory della soluzione del progetto e il file elmah.dll.refresh viene inserito nella cartella bin del progetto.

Quando costruisco il progetto a livello locale, Visual Studio inserisce automaticamente la DLL a cui si fa riferimento dal file di aggiornamento. Il sito e Elmah funzionano correttamente. Non ho il file elmah.dll che si trova nella directory bin del progetto che ha effettuato il check -in per il controllo delle origini (solo il file di aggiornamento e la cartella dei pacchetti vengono controllati).

Tuttavia, sto utilizzando progetti di distribuzione Web per pre-compilare il sito e eseguire sostituzioni Web.Config per le distribuzioni. Quando la soluzione è costruita in questo modo, elmah.dll non viene automaticamente attirato nella directory del bin del progetto del sito Web e il sito non viene eseguito correttamente a causa della DLL mancante.

In che modo Nuget è destinato a essere usato in questo tipo di scenario? Suppongo di controllare elmah.dll nella directory del cestino?

È stato utile?

Soluzione

Questo si basa sulla soluzione di GC. Sopra. Aggiungi una biblioteca di classe (CSPROJ) e fai riferimento a quella libreria di classe nel progetto del sito Web. Aggiungi i pacchetti NuGet alla libreria di classe. Nella biblioteca di classe, In realtà fare riferimento ai pacchetti NuGet in alcuni file di classe. Forse creare un'istanza da buttare o qualcosa del genere. Puoi usare qualsiasi classe contenuta nel pacchetto. Ciò costringe il .dll ad essere copiato nella directory del bin nel progetto del sito Web.

Altri suggerimenti

- Modifica- Vedi la versione aggiornata di questa soluzione sopra.

Basta aggiungere un progetto di biblioteca di classe alla soluzione e aggiungere un riferimento al progetto della biblioteca di classe al tuo sito Web.

Quindi, aggiungi il Nuget nella biblioteca di classe, non nel progetto del sito Web.

Quando il tuo sito Web si basa, a sua volta attira tutte le dipendenze delle biblioteche di classe.

Immagino che la pre -compilazione non aggiorni le DLL utilizzando il file .Refresh, forse è fatto da Visual Studio.

Se non riesci a trovare un modo per farlo, potresti creare un passaggio di build che copia manualmente le DLL nella cartella del cestino, o se stai cercando di evitare due copie delle DLL, forse potresti controllare nella cartella del cestino E non i pacchetti uno. È possibile utilizzare NuGet.exe per recuperare i pacchetti, popolare la cartella dei pacchetti (vedi qui e qui)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top