11
votes

Utilisation de Nuget avec * .dll.refresh Files dans les projets d'ASP.NET "Site Web" avec des projets de déploiement Web

Si vous avez un type de projet de site Web ASP.NET (celui-ci sans un fichier de projet .CSPROJ ou .VPProj approprié et qui est juste un dossier de fichiers en vrac), alors lorsque vous ajoutez un package avec Nuget, il fait une * .dll.refresh File dans le répertoire BIN pour référencer la DLL du package dans le dossier Packages parent.

Par exemple, si vous exécutez "ELMAH INSTALL-PACKAGE" à partir de la console de gestionnaire de packages, ElMAH est placé dans le dossier Packages dans le répertoire de solutions du projet et le fichier elmaah.dll.refresh est placé dans le dossier BIN du projet. .

Lorsque je construit le projet localement, Visual Studio tire automatiquement dans la DLL référencée par le fichier de rafraîchir. Le site et Elmah fonctionnent correctement. Je n'ai pas le fichier elmaah.dll qui siège dans le répertoire bin du projet est enregistré dans le contrôle de la source (seul le fichier d'actualisation et le dossier de packages sont enregistrés).

Cependant, j'utilise des projets de déploiement Web pour pré-compiler le site et faire des substitutions Web.config pour les déploiements. Lorsque la solution est construite de cette façon, Elmah.dll n'est pas automatiquement tiré dans le répertoire bin de projet du site Web et le site ne fonctionne pas correctement en raison de la DLL manquante.

Comment Nuget est-il destiné à être utilisé dans ce type de scénario? Suis-je supposé vérifier elmah.dll dans le répertoire bin?


0 commentaires

3 Réponses :


0
votes

Je suppose que la pré-compilation ne met pas à jour les DLL à l'aide du fichier .reFresh - peut-être que c'est fait par Visual Studio.

Si vous ne trouvez pas un moyen de le faire, vous pouvez créer une étape de construction qui copie manuellement les DLL dans le dossier BIN ou si vous essayez d'éviter deux copies des DLL, vous pourriez peut-être vérifier le dossier bin et non les paquets un. Vous pouvez utiliser Nuget.exe pour re-récupérer les packages, peupler le dossier de packages (voir ICI et ici )


0 commentaires

5
votes

- Modifier - voir la version mise à jour de cette solution ci-dessus.

Ajoutez simplement un projet de bibliothèque de classe à la solution et ajoutez une référence au projet de la bibliothèque de classe sur votre site Web.

Ensuite, ajoutez le Nuge dans la bibliothèque de la classe, pas le projet de site Web.

Lorsque votre site Web s'appuie, il tire dans toutes les dépendances des bibliothèques de classe.


0 commentaires

11
votes

Ceci est basé sur la solution de GC. Ajouter une bibliothèque de classe (CSPROJ) et référencez cette bibliothèque de classe dans le projet de site Web. Ajouter les packages Nuget à la bibliothèque de classe. Dans la bibliothèque de classe, Référencez effectivement les packages Nuge dans un fichier de classe . Peut-être créer une instance jetables ou quelque chose. Vous pouvez utiliser n'importe quelle classe contenue dans l'emballage. Cela force le fichier .dll à être copié dans le répertoire bin dans le projet de site Web.


1 commentaires

Ceci est testé et fonctionne à la fois dans Visual Studio et en exécutant Msbuild directement dans une machine de construction.