web-dev-qa-db-fra.com

Création d'un package NuGet à partir de plusieurs projets dans une seule solution

J'ai une solution sur laquelle je travaille qui contient 4 projets de bibliothèque de classe (A, B, C, D). A et B peuvent être considérés comme les projets de niveau supérieur dans la solution. A et B font référence C, et D sont autonomes.

Ces quatre projets représentent un groupe de services que j'ai créés qui gèrent un flux de travail automatisé. Ils sont tous étroitement liés et ne seront utilisés que dans un seul endroit (le gestionnaire de services), donc je ne veux pas les diviser en différentes solutions.

Mon problème est que je veux créer un seul package NuGet qui contiendra les 4 bibliothèques, sans avoir à les construire toutes et à rassembler leurs DLL manuellement. Je sais que je pourrais techniquement y parvenir en ayant A ou B référencer les projets restants, mais ce n'est pas une vraie relation et je pense que cela devrait être évité.

J'ai fait beaucoup de recherches sur ce problème et je ne trouve pas de solution autre que la collecte manuelle des DLL et la création du package moi-même. Existe-t-il un moyen d'obtenir le résultat que je souhaite en utilisant les fonctionnalités/capacités de NuGet?

NOTE : Dans le cas où les balises ne l'indiquent pas clairement, j'utilise actuellement VS2010 avec un serveur de build TeamCity. Si cela est pertinent, j'utilise également Git via un serveur Stash.

EDIT : Je viens de réaliser que cela pourrait être suffisamment important pour être mentionné. Ces projets font référence à d'autres packages NuGet que je devrai marquer comme dépendances.

27
Logarr

Vous devez définir votre propre manifeste nuspec. Vous pouvez lister les assemblys contenant dans la section files:

<file src="A\bin\Release\A.dll" target="lib\net40" />
<file src="B\bin\Release\B.dll" target="lib\net40" />
...

Pour plus de détails, lisez référence NuSpec .

Référencez ensuite ce fichier nuspec dans l'étape de génération NuPack au lieu de proj.

17
Aleš Roubíček

Si vous avez téléchargé NuGet.exe Vous pouvez exécuter: nuget pack Myproject.csproj -IncludeReferencedProjects et cela devrait inclure tous vos projets. Voici une note du NuGet docs :

Si le projet fait référence à d'autres projets, vous pouvez ajouter les projets référencés dans le cadre du package ou en tant que dépendances avec l'option -IncludeReferencedProjects. Cela se fait récursivement. Par exemple, supposons que vous ayez le projet A.csproj, qui référence B.csproj et C.csproj, tandis que B.csproj référence D.csproj & E.csproj, C.csproj référence F.csproj & G.csproj. Ensuite, lorsque vous exécutez:

nuget pack A.csproj -IncludeReferencedProjects

le package généré contiendra des fichiers des projets B, C, D, E, F & G, en plus des fichiers du projet A.

Si un projet référencé possède un fichier nuspec correspondant portant le même nom, ce projet référencé est ajouté à la place en tant que dépendance. En utilisant le même exemple, supposons maintenant que le fichier C.nuspec se trouve dans le même répertoire que le fichier de projet C.csproj. Lorsque vous exécutez:

nuget pack A.csproj -IncludeReferencedProjects

le package généré contiendra des fichiers des projets B, D, E, en plus des fichiers du projet A, et le package dépend de C.

Veuillez également consulter la référence de la ligne de commande .

14
Que

cela résoudra probablement ce problème: nuget.exe pack proj.csproj -IncludeReferencedProjects

vous pouvez voir: Créer un paquet nuget pour une solution avec plusieurs projets

0
C.Frank