83 votes

La version du paquet est toujours 1.0.0 avec le paquet Dotnet.

TLDR : Où se trouve dotnet pack tire les informations de version lorsqu'il crée le paquet nuget pour un assemblage ?

J'ai une bibliothèque, que j'avais fait passer d'un projet .NET 4.6.1 à un projet .NET Core avec project.json . Pour mon CI durant cette période (utilisant TFS 2015 vnext), je récupérais mon numéro de version et remplaçais le numéro de version dans le fichier project.json par la nouvelle version. Le site dotnet pack récupère la version sans problème et crée un nouveau paquet avec le numéro de version mis à jour.

La semaine dernière, j'ai effectué une mise à niveau de TFS 2015 à TFS 2017. Il s'avère que le fichier project.json a été remplacé par un fichier .csproj mis à jour. J'ai mis à jour mon CI. Pendant mon CI - je mets à jour mon /Properties/AssemblyInfo.cs en remplaçant le fichier AssemblyVersion avec la version de la construction actuelle. Ensuite, je construis la solution - qui se construit très bien. Puis j'emballe la solution.

Cependant, malgré la AssemblyVersion y AssemblyFileVersion en cours de réalisation AssemblyInfo.cs au numéro de série correct - dotnet pack produit toujours des fichiers .nupkg qui sont *.1.0.0.nupkg .

Qu'est-ce que je rate ?

Voici ma commande de pack :

dotnet pack $projectFile -o $currentDirectory

0 votes

Est-ce que c'est juste <PackageVersion>value</PackageVersion> ?

0 votes

Ce poste a également une réponse intéressante à cette question.

109voto

Edward Points 560

Mieux encore, précisez /p:Version=$(Build.BuildNumber) (TFS/VSTS) sur la commande dotnet pack et il le construira avec la version spécifiée dans le paquet nuget. Exemple (non spécifique à TFS) :

dotnet pack .\src\example\example.csproj -o c:\published\example -c Release /p:Version=1.2.3

Exemple (spécifique à TFS) <- nous utilisons ceci pour notre conditionnement TFS 2017 en utilisant une étape powershell script.

dotnet pack $(Build.SourcesDirectory)\src\example\example.csproj -o $(Build.ArtifactStagingDirectory)\Pack -c Release /p:Version=$(Build.BuildNumber)

Remarque : elle ne met pas à jour les versions de référence des paquets.

20 votes

Pour tous ceux qui ont des problèmes avec ça, assurez-vous que vous n'avez pas de <Version> o <VersionPrefix> dans votre *.csproj fichier. Sinon, ils remplaceront ce que vous avez spécifié dans votre ligne de commande.

0 votes

Merci Edward. Après avoir cherché sur internet, je suis arrivé à la même conclusion (je veux définir la version via ci build). J'ai ajouté un défaut dans le csproj afin que je puisse dire si un Dev construit sur leur PC personnel. J'ai utilisé une condition dans le csproj pour ne définir VersionSuffix que si elle n'est pas définie. Je n'ai PAS remplacé la définition de la version. De cette façon, la version aura "private.$USERNAME" à la fin. Voici comment tout cela se passe dans le code source de Build github.com/dotnet/sdk/blob/

1 votes

Si je me souviens bien, le pack Dotnet de l'époque appelait msbuild sous le capot et tous les paramètres inconnus, comme /p:xxx, étaient transmis à cette application. Les arguments /p sont quelque chose que j'ai appris à mettre en place des constructions automatisées pendant de nombreuses années. Pour information, l'étape de construction de dotnet pack dans TFS 2018 a maintenant l'option de définir la version du paquet, donc nous n'avons plus besoin de définir le paramètre comme cela.

50voto

Nate Barbettini Points 26922

Lorsque vous utilisez dotnet pack la version est tirée de la définition du projet (précédemment project.json Maintenant. *.csproj ), pas AssemblyInfo.cs . Ainsi, votre nouveau flux de travail sera très similaire à ce qu'il était avec project.json .

De la docs sur la migration de project.json vers csproj vous pouvez utiliser l'option VersionPrefix y VersionSuffix propriétés.

Avant :

{
  "version": "1.0.0-alpha-*"
}

Maintenant :

<PropertyGroup>
  <VersionPrefix>1.0.0</VersionPrefix>
  <VersionSuffix>alpha</VersionSuffix>
</PropertyGroup>

Vous pouvez également utiliser l'unique Version mais la documentation prévient que cela "peut remplacer les paramètres de version pendant l'empaquetage".

<PropertyGroup>
  <Version>1.0.0-alpha</Version>
</PropertyGroup>

2 votes

J'ai fini par utiliser powershell pour réécrire le .csproj dans le cadre de la construction pour remplacer le préfixe et le suffixe de la version.

9 votes

En outre, vous pouvez fournir le VersionPrefix et le VersionSuffix (ou simplement la propriété Version) à la ligne de commande en ajoutant quelque chose comme "/p:Version=1.0.0-alpha" à la commande dotnet pack.

19voto

mishrsud Points 666

REMARQUE : Je comprends que cette question ne concerne pas spécifiquement VSTS/Azure Dev Ops, mais une recherche sur la façon de faire cela sur un pipeline de construction aboutit ici et j'ajoute ce qui a fonctionné pour moi.

  1. Utilisez la tâche dotnet core
  2. Outils version 2.*
  3. Commande = personnalisée
  4. Commande personnalisée = pack
  5. Arguments = -p:Version=1.0.$(Build.BuildId) -o $(Build.ArtifactStagingDirectory)

L'argument -o est requis si la tâche qui suit l'empaquetage doit pousser vers un flux (n'est-ce pas pour cela qu'on construit des paquets ?).

0 votes

Notez que vous pouvez également le faire avec l'étape de construction de Visual Studio si votre projet a les tâches de construction nuget. En utilisant l'étape /t:Pack puis en spécifiant la version et le chemin de sortie du paquet comme propriétés supplémentaires.

0voto

J'ai essayé de nombreuses variantes pour changer la version du paquet nuget cible et la solution suivante de mon collègue a fonctionné pour moi. Dans le dossier src, il y a un fichier appelé 'Directory.Build.props' où les versions sont définies comme ci-dessous :

  <Target Name="CustomVersion" AfterTargets="MinVer">
    <PropertyGroup>
      <FileVersion>$(MinVerMajor).$(MinVerMinor).$(MinVerPatch)</FileVersion>
      <AssemblyVersion>$(MinVerMajor).$(MinVerMinor).$(MinVerPatch)</AssemblyVersion>
    </PropertyGroup>
  </Target>

Vous pouvez remplacer cela par la version pour laquelle vous essayez de créer le paquet nuget. par exemple :

  <Target Name="CustomVersion" AfterTargets="MinVer">
    <PropertyGroup>
      <FileVersion>106.11.7</FileVersion>
      <AssemblyVersion>106.11.7</AssemblyVersion>
      <InformationalVersion>106.11.7</InformationalVersion>
      <PackageVersion>106.11.7</PackageVersion>
    </PropertyGroup>
  </Target>

Maintenant, en exécutant 'dotnet pack -c Release -o nuget -p:IncludeSymbols=true -p:SymbolPackageFormat=snupkg', le paquet nuget correspondant avec la version désirée sera créé.

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