Je vais poser quelques questions ici ... d'abord, avec NuGet, est-il possible de créer un paquet à partir de quelques DLL? Il n'y a pas de projet Visual Studio, juste la ligne de commande et quelques fichiers DLL pré-compilés.
Deuxièmement, en supposant que cela soit possible, pourquoi l’avertissement «Assemblée en dehors du dossier lib» est-il toujours affiché? J'ai tout essayé pour que les assemblées associées s'ajoutent comme références à l'intérieur du paquet NuGet.
Ma structure de fichier ressemble à ceci
Root
- File1.dll
- lib
- File2.dll
- File3.dll
Quand je dis à NuGet de l’emballer avec un .nuspec comme celui-ci
<?xml version="1.0"?>
<package >
<metadata>
<id>File1.dll</id>
<version>1.0.0</version>
<authors>thisguy</authors>
<owners>thisguysmom</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>This is some library</description>
<releaseNotes>Porting to NuGet</releaseNotes>
<copyright>Copyright 2012</copyright>
<references>
<reference file="File2.dll" />
<reference file="File3.dll" />
</references>
</metadata>
</package>
Je reçois cet avertissement. D'après ce que je lis, je ne devrais même pas avoir à définir le nœud de références dans aucun de mes projets, car les éléments du dossier lib devraient automatiquement être ajoutés comme références.
Est-ce que quelqu'un comprend ce désordre NuGet?
Toute dll que vous voulez référencer doit être dans le dossier lib. L'avertissement vient du fait que file1.dll se trouve en dehors de la bibliothèque et sera ignoré lors de l'installation du package. (Les autres dossiers spéciaux sont "contenu" et "outils")
J'avais utilisé cette structure:
Root
- lib
- File1.dll
- File2.dll
- File3.dll
Voir: http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package#Package_Conventions pour plus de détails.
Je viens de rencontrer ce problème. Nuget attend une structure qui ressemble à:
root
- lib
- net40
- File1.dll
- File2.dll
- File3.dll
net40 ou net20 ou net45 selon votre version .net.
courir
nuget pack yourlibrary.nuspec
pour emballer.
Cela va emballer le dir en gros et le mettre dans le nupkg. Les messages d'erreur disparaîtront à ce stade.
Avec la version actuelle de NuGet à compter de cette publication (et je suppose également pour les versions ultérieures), vous pouvez utiliser le fichier .csproj, conjointement avec le fichier .nuspec pour créer le package. Nous avons créé un fichier .nuspec (à l’aide de la spécification Nuget, puis de son personnalisation) et l’inclu dans le projet.
Avec le fichier .nuspec personnalisé, nous avons utilisé la commande:
nuget pack sample.csproj -IncludeReferencedProjects
À ce stade, il a construit le .nupkg et n'a pas émis de problèmes. Le fichier .nupkg est apparu dans le dossier de sortie normal (dans mon cas par défaut, bin\debug).
Vous pouvez ajouter des références à une autre dll en ajoutant ci-dessous la balise inside dans le fichier nuspec
<package>
<metadata>
...
</metadata>
<files>
<file src="..\ReferencedFolder\*.*" target="lib\net40\" />
</files>
</package>
Alexandre fait référence au dossier "lib" créé lors de la création d'un paquet NuGet. Vous pouvez ouvrir le fichier .nupkg comme vous le feriez avec n'importe quel fichier Zip. Vous y verrez un dossier lib\netXX où XX est la version du framework .NET que vous ciblez. Ainsi, lorsque vous préparez votre fichier NuGet, assurez-vous que File1.dll se trouve dans le dossier lib.
Ils entrent dans le dossier "lib" en étant inclus dans votre dossier bin\debug ou bin\release dans .NET. Vous devez donc faire en sorte que le projet soit compilé en local sur les DLL externes afin de pouvoir les inclure dans le dossier bin lors de la compilation.
Si des dépendances ou des bibliothèques ont été modifiées, les anciens fichiers affectent l’opération d’emballage.
obj
et bin
du projet.dotnet restore
nuget pack yournuspecfile.nuspec -properties Configuration=Release -IncludeReferencedProjects
ou votre commande, peu importe.J'ai utilisé la solution du professeur Von Lemongargle et c'était pour moi une excellente solution . Important:
Cela fonctionne parfaitement dans Visual Studio 2012.