web-dev-qa-db-fra.com

Construisez le package NuGet en incluant automatiquement les dépendances référencées

Je veux exécuter un référentiel NuGet local/interne . Je pense que j'ai compris comment "réutiliser" les packages NuGet existants en les incluant dans un projet factice utilisant NuGet et en scannant le fichier du package pour récupérer mon _ localement mis en cache .nupkg fichiers , mais ...

Comment créez-vous un paquet nuget (.nupkg) à partir d'un projet, incluant automatiquement toutes les dépendances dll et pas seulement celles saisies via NuGet?

Plus précisément:

  1. Créer une solution
  2. Ajouter un nouveau projet
  3. Ajoutez des références à divers .dll fichiers/autres projets <- c'est la partie manquante
  4. Ajouter des packages NuGet via le gestionnaire de packages/cmdline/autre
  5. quelque chose crée automatiquement le .nupkg

D'après ce que j'ai trouvé, vous êtes censé faire des choses comme

  • éditez manuellement votre .csproj fichier à ajouter <BuildPackage>true</BuildPackage> pour inclure les dépendances
  • créer manuellement un .nuspec fichier et manuellement listez vos dépendances ( similaire? )
  • exécuter manuellement nuget pack Sur ton .nuspec fichier

Mais tout est manuel, ce qui est stupide. Même les solutions semi-automatiques sont toujours maladroites ou semi-manuelles:

Je vais me contenter de quelque chose qui crée automatiquement un .nuspec manifeste à partir des références du projet. Ensuite, théoriquement, + l'événement de génération nuget peut être cumulé dans un package build-project/nuget, ce que je veux vraiment voir.

54
drzaus

Votre point # 3 ( Ajoutez des références à divers fichiers .dll/autres projets <- c'est la partie manquante ) contient vraiment deux problèmes différents: (1 ) ajouter des références à divers fichiers dll et (2) ajouter des références à d'autres projets dans la même solution.

Le numéro (2) ici a obtenu un support supplémentaire à partir de NuGet 2.5 . Vous pouvez ajouter une option pour inclure des références à d'autres projets dans la même solution lors de la création d'un package NuGet pour un projet:

nuget pack projectfile.csproj -IncludeReferencedProjects

Si projectfile.csproj fait référence à tout autre projet de votre solution qui est également exposé en tant que packages NuGet, les packages NuGet de ces projets seront ajoutés en tant que dépendances. S'il fait référence à des projets dans votre solution qui ne s'exposent pas en tant que packages NuGet, leurs DLL seront incluses dans ce package NuGet.

En ce qui concerne (1), si vous vous trouvez souvent à ajouter des DLL à vos projets qui ne sont pas disponibles en tant que packages NuGet, vous pouvez simplement créer vos propres packages NuGet (internes) avec ces fichiers. Si vous ajoutez ensuite ces DLL en tant que package NuGet au lieu des fichiers directement, ce package NuGet sera une dépendance dans le package NuGet de votre projet.

58
Julian

Pour les autres Googleurs, vous pouvez l'utiliser si vous utilisez le fichier NuGet.targets pour exécuter NuGet Pack:

<Target Name="PrePackage" BeforeTargets="BuildPackage">
  <PropertyGroup>
    <BuildCommand>$(BuildCommand) -IncludeReferencedProjects</BuildCommand>
  </PropertyGroup>
</Target>
5
John Gietzen

Regarde ça!

La solution que j'ai trouvée est une extension pour Visual Studio: https://visualstudiogallery.msdn.Microsoft.com/fbe9b9b8-34ae-47b5-a751-cb71a16f7e96/view/Reviews

Vous ajoutez simplement un nouveau projet appelé Nuget Package NuGet Package

Ensuite, vous ajoutez des projets intéressants à des références et à BOOOM !! Toutes les dépendances et répertoires de fichiers sont automatiquement ajoutés. Si vous souhaitez modifier les données NuSpec, cliquez avec le bouton droit sur le projet et accédez à Propriétés, puis modifiez ce que vous voulez. NuSpec et nupkg générés seront dans le dossier obj de votre nouveau projet. J'espère que ça aide;).

1