128 votes

Emballage des projets NuGet compilés en mode "release" ?

Existe-t-il un moyen de créer un paquet NuGet en utilisant du code compilé en mode release ? Ou y a-t-il une raison pour laquelle je ne devrais publier (rendre disponible localement, dans ce cas) que les paquets compilés en mode débogage ?

Chaque fois que j'appelle nuget pack à partir du répertoire de mon projet, où se trouve le fichier nuspec ci-dessous, sur du code que j'ai seulement compilé en mode release, il se plaint de ne pas trouver la DLL dans le dossier debug ( "\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>

233voto

Giorgi Points 15760

Vous pouvez le résoudre comme ceci :

NuGet.exe pack Foo.csproj -Prop Configuration=Release

( référence )

11 votes

Pour ceux qui veulent connaître l'histoire courte 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 tirée d'un paramètre du projet qui ne peut être modifié que dans le fichier du projet directement (pas d'option VS GUI). Pour éviter la modification de la propriété en ligne de commande pour toutes les futures versions de nuget pack appels, éditez le fichier de projet XML dans votre éditeur de texte préféré.

4 votes

Existe-t-il un moyen de regrouper les versions Release et Debug dans un seul paquet et de faire en sorte que mon projet utilise automatiquement la version Debug ou Release selon que je suis en configuration Debug ou Release Solution ?

0 votes

@JD : Pour autant que je sache, ce n'est pas possible mais je pensais contribuer à nuget. Pouvez-vous expliquer dans quel scénario vous auriez besoin de cette fonctionnalité ? Quand sera-t-elle utile ?

19voto

EnderWiggin Points 86

Si vous utilisez un événement post-build et que vous voulez créer un paquet en utilisant 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)

13voto

Sam Points 3542

Pour que NuGet utilise automatiquement le mode Release lorsque vous exécutez nuget pack faites ce qui suit :

  1. Ouvrez votre .csproj dans un éditeur de texte.

  2. Trouvez la ligne suivante :

    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
  3. Dans cette ligne, remplacez Debug avec Release .

  4. Enregistrez les modifications.

2voto

kayleeFrye_onDeck Points 3244

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 compilation par défaut.

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

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

0voto

Razique Points 121

J'interviens ici. Mon profil de construction devrait construire les DLLs pour bin\<arch>\Debug|Release . J'ai pu pointer vers mes dossiers en exécutant la commande nuget comme suit : Remarquez comment j'ai utilisé le -p option.

PS > nuget pack -p Configuration="x64\Release"

Attempting to build package from ...
...

Found packages.config. Using packages listed as dependencies
...
- Add a dependency group for .NETFramework4.7.2 to the nuspec
Successfully created package...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X