Disons que j'ai un projet avec cette structure:
MyLibrary\
MyLibrary.sln
MyLibrary.Core\
MyLibrary.Core.csproj
MyLibrary.Extensions\
MyLibrary.Extensions.csproj
MyLibrary.Tests\
MyLibrary.Tests.csproj
Je souhaite créer un seul package NuGet contenant les packages MyLibrary.Core.dll et MyLibrary.Extensions.dll. Je n'arrive pas à comprendre comment faire en sorte que NuGet le fasse. J'ai essayé de construire manuellement un fichier de spécification et j'en ai créé un en utilisant "nuget spec MyLibrary.Core.csproj". J'ai essayé d'ajouter toutes les DLL à un dossier lib/qui, d'après ce que j'ai compris, est le mécanisme conventionnel permettant d'ajouter des DLL au package. Dans tous les cas, je peux obtenir le fichier MyLibary.Core.dll dans le package, mais le fichier MyLibrary.Extensions.dll n'est pas emballé avec.
TLDR: Quelle est la meilleure pratique pour créer un package NuGet avec plusieurs projets/assemblages? Existe-t-il un tutoriel sur ce sujet? Les tutoriels que j'ai trouvés se concentrent tous sur de simples démos à projet unique.
Vous exécuterez NuGet sur un seul projet (ou fichier nuspec), mais il prend en charge les pointeurs vers d'autres projets via l'élément file
. Cet élément utilise les noms des Références de votre projet. Vous évitez ainsi de devoir a) trouver l'emplacement des autres fichiers du projet et b) copier les fichiers dans un emplacement particulier lors de l'étape de post-génération.
Supposons que vous ayez un fichier nuspec pour MyLibrary.Core.csproj et qu'il fasse référence à MyLibrary.Extensions et MyLibrary.Tests, de sorte qu'ils se retrouvent dans le répertoire bin après une construction:
<package xmlns="http://schemas.Microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
...
</metadata>
<files>
<file src="bin\Release\MyLibrary.Extensions.dll" target="lib\net40" />
<file src="bin\Release\MyLibrary.Tests.dll" target="lib\net40" />
</files>
</package>
Avec cette configuration, toutes vos références devraient se retrouver à la place appropriée dans le package NuGet. Vous avez toujours la «version» codée en dur là-dedans, mais je parierais fort probablement que de toute façon, ne distribuez pas les paquets NuGet de leurs versions de débogage.
Avez-vous généré un fichier nuspec vierge avec:
nuget spec
Si vous utilisez ce fichier et que vous placez ensuite vos dll dans un dossier nommé lib, il les conditionnera.
J'ai eu un peu de mal à essayer de générer un fichier nuspec à partir d'un projet ou dll. En outre, si vous référencez manuellement l'un des fichiers du fichier nuspec, les conventions ne sont pas utilisées. C'est probablement le problème avec les nuspecs générés à partir de dll ou de projets.
De même, si vous essayez de l'exécuter à partir d'un script de génération exécuté dans un autre dossier, vous pouvez indiquer à nuget l'emplacement de votre dossier.\Lib à l'aide de la ligne de commande -BasePath:
build\nuget.exe pack nuget\Company.Project.nuspec -BasePath nuget\
Avez-vous essayé NuGet Package Explorer? Peut-être le moyen le plus simple:
j'ai quelques tutoriels comment je l'ai fait avec Windows et Visual Studio:
créez un dossier local et appelez-le comme suit: c:/packages // lib - il est important de créer un autre dossier dans le dossier, appelez-le lib et past there.
ouvrir le paquet nuget Explorer - https://npe.codeplex.com/downloads/get/clickOnce/NuGetPackageExplorer.application
l'interface utilisateur très intuitive suffit d'ajouter la dll et de l'exporter dans/lib (pour le tutoriel https://blog.zwezdin.com/2014/building-nuget-packages-with-gui-tool/ en russe mais voir sur images du flux c'est environ 3 clics)
il va créer un fichier nuspec
ouvrez GIT BASH - https://git-for-windows.github.io/ et naviguez jusqu'à: cd c: => cd packages (le chemin de)
* Peut-être que sur Windows, vous aurez besoin de fournir des options de développement pour le contenu linux de Windows ( https://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-Shell-on-windows -dix/ )
dans GIT BASH, entrez la commande suivante: nuget add -source [options]
où: nom complet de nuspec (inclure .nuspec)
et: le chemin du dossier lib dans le dossier (c:/packages // lib)
après l'action terminée avec succès
dans GIT BASH, entrez une autre commande:
nuget Pack .nuspec
pas dans ce dossier vous avez le fichier .nupkg.
Comment installer un fichier .nupkg de paquet Nuget localement? - tutoriel comment l'ajouter à Visual Studio.
J'ai récemment publié une solution pour cela ...
Ma solution permet la création automatique de packages NuGet lorsque vous la créez, chaque package pouvant contenir plusieurs assemblys, des références à la fois aux NuGets externes et aux NuGets créés lors de la même construction, et même inclure le code source pour le débogage.
Dans votre cas, il vous suffit d'ajouter un nouveau projet de bibliothèque de classes à votre solution, de référencer les projets que vous souhaitez empaqueter, puis d'ajouter un événement post-build.
Vous pouvez trouver un article avec un guide pas à pas ici et le code source + binaire ici .
Il semble que votre problème soit le même que cette question: Pourquoi nuget n'inclut-il pas le projet référencé lors de l'emballage? . Si tel est le cas, vous pouvez utiliser l'option -includereferencedprojects (voir http://docs.nuget.org/docs/reference/command-line-reference#Pack_Command ).
J'ai eu le même problème et j'ai décidé de créer Nuget qui permettra de créer d'autres nugets à partir du projet choisi.
Le package est déployé sur le site Nuget.org . Après l'avoir référencé dans le projet, vous devez ajouter un fichier nuspeck aux projets qui devraient générer les projets.
Projet avec le fichier nuspeck requis
La dernière chose à faire est d'appeler la commande Create-Nuspec dans le gestionnaire de packages. Ensuite, le module powershell prendra toutes les bibliothèques résultant de la construction, il ajoutera également les dépendances requises et créera le nuget dans le répertoire de sortie.
La description de ce paquet est placée ici .