web-dev-qa-db-fra.com

NuGet Assembly hors dossier lib

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?

43
farina

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.

12
Alexandre Dion

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.

18
Jason Wall

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).

12

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>
9
Madhu Ranjan

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.

0
Adam S

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. 

0
user3683706

Si des dépendances ou des bibliothèques ont été modifiées, les anciens fichiers affectent l’opération d’emballage. 

  1. Supprimez les dossiers obj et bin du projet.
  2. Exécuter dotnet restore
  3. Exécutez nuget pack yournuspecfile.nuspec -properties Configuration=Release -IncludeReferencedProjects ou votre commande, peu importe.
0
Hayrullah Cansu

J'ai utilisé la solution du professeur Von Lemongargle et c'était pour moi une excellente solution . Important:

  1. Inclure le fichier de spécification (avec clic droit-> Inclure dans le projet) dans le projet
  2. Donnez au fichier de spécification le même nom de fichier de votre projet (myproject.csproj, myproject.nuspec)

Cela fonctionne parfaitement dans Visual Studio 2012.

0
user2408082