Packing des projets NuGet compilés en mode version?

109

Existe-t-il un moyen de créer un package NuGet à l'aide de code compilé en mode version? Ou y a-t-il une raison pour laquelle je ne devrais publier (rendre disponible localement, dans ce cas) que des packages compilés en mode débogage?

Chaque fois que j'appelle nuget packdepuis mon répertoire de projet, où j'ai le fichier nuspec ci-dessous, sur du code que je n'ai compilé qu'en mode release, il se plaint de ne pas trouver la DLL dans le dossier de débogage ( "\bin\Debug\SomeProject.dll"). Si je le compile en mode débogage, ces fichiers sont là et il les emballe comme il se doit.

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
        <id>$id$</id>
        <version>$version$</version>
        <authors>$author$</authors>
        <owners>$author$</owners>
        <iconUrl>http://somewhere/project.png</iconUrl>
        <requireLicenseAcceptance>false</requireLicenseAcceptance>
        <description>$description$</description>
    </metadata>
</package>
Patridge
la source

Réponses:

208

Vous pouvez le résoudre comme ceci: NuGet.exe pack Foo.csproj -Prop Configuration=Release( la référence ).

Giorgi
la source
10
Pour tous ceux qui veulent la nouvelle à partir du lien (bonne lecture, cependant), il y a eu un changement de la v1.3 à la v1.4 qui passe d'une valeur par défaut de Release à une valeur par défaut extraite d'un paramètre de projet qui ne peut être modifié que dans le fichier projet directement (pas d'option VS GUI). Pour éviter l'ajustement des propriétés de ligne de commande pour tous les nuget packappels futurs , modifiez le fichier XML du fichier de projet dans votre éditeur de texte préféré.
patridge
4
Existe-t-il un moyen de regrouper à la fois une version Release et Debug dans un package, puis que mon projet utilise automatiquement le Debug one vs Release one selon que je suis en configuration Debug vs Release Solution?
JD du
2
Si vous voulez simplement des symboles de débogage pour votre package, vous pouvez soit inclure vos fichiers PDB dans le * .nuspec (par exemple <file src="bin\Release\*.pdb" target="lib\net40\" />), soit publier un package de symboles à côté de votre package DLL.
patridge le
1
@Giorgi lien expiré
Weipeng L
1
@JD Je veux également emballer à la fois Debug et Release , et j'ai trouvé ceci: stackoverflow.com/questions/37673692/…
Peter-Yu
16

Si vous utilisez un événement post-build et que vous souhaitez créer un package que vous utilisiez la configuration Debug ou Release, vous pouvez configurer la ligne de commande de l'événement post-build comme suit:

"<path to nuget tools>\NuGet.exe" pack "$(ProjectPath)" -Prop Configuration=$(ConfigurationName)
EnderWiggin
la source
10

Pour que NuGet utilise automatiquement le mode Release lorsque vous exécutez nuget pack, procédez comme suit:

  1. Ouvrez votre .csprojfichier dans un éditeur de texte.
  2. Trouvez la ligne suivante:

    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    
  3. Dans cette ligne, remplacez Debugpar Release.
  4. Sauvegarder les modifications.
Sam
la source
0

Les réponses ici sont bonnes, mais j'avais beaucoup de problèmes avec cela pour un projet .NET Standard. J'avais un projet qui n'allait publier que des binaires Release, mais il ne respectait pas mon chemin de sortie de construction par défaut.

J'ai ajouté ceci à mon CSProj qui m'a ensuite permis d'utiliser la réponse acceptée ici .

<PropertyGroup Condition="'$(Configuration)' == 'Release'">
      <OutputPath>$(SolutionDir)bin\$(PlatformTarget)\Release</OutputPath>
</PropertyGroup>
kayleeFrye_onDeck
la source