web-dev-qa-db-fra.com

Ajouter le numéro de build à la version du package avec `dotnet pack` dans le processus de construction VSTS

Avec une bibliothèque .NET Framework, vous pouvez spécifier une version avec un caractère générique et la commande NUGET pack ajouterait automatiquement la date de construction et la version lors de l'exécution d'une tâche de génération NUGET dans VSTS.

[Assembly: AssemblyVersion("1.0.*")]

NUGET PACK générerait un fichier NUPKG avec une version comme 1.0.6604.1234 En ajoutant le numéro de date et un ID de build.

Problèmes NET standard

Dans .NET Core et .NET standard, le nouveau format .csproj Ne prend pas en charge ce format générique.

Nous ne pouvons pas empaqueter avec Nuget.exe (raison: ce problème ) mais nous pouvons utiliser dotnet pack Sauf que j'ai besoin d'incrémenter automatiquement les numéros de build. La tâche de construction dotnet dans VSTS me permet de remplacer entièrement le numéro de version, mais je souhaite conserver la version dans le fichier csproj et simplement ajouter un numéro de version (comme je le faisais auparavant).

J'ai trouvé que l'utilisation de <VersionPrefix>x.y</VersionPrefix> Dans le fichier csproj fonctionnerait avec nuget pack Et je pourrais ensuite ajouter le paramètre supplémentaire VersionSuffix=$(Build.BuildNumber) à la tâche de pack.

Tout allait bien jusqu'à ce que le premier développeur mette à jour la version du projet dans la boîte de dialogue des propriétés du projet. Visual Studio a ignoré le VersionPrefix et a défini la balise <Version> - et la correction du numéro de build est ignorée car une balise Version existe.

Existe-t-il un moyen de lire le Version du csproj? Si c'est le cas, je pourrais définir la propriété de construction sur Version=$(ProjectVersion).$(Build.BuildNumber)?

Ou existe-t-il d'autres façons de gérer l'incrémentation automatique de la version de génération lors de l'empaquetage?

8
Quango

Merci à @ patricklu-msft pour ses suggestions.

Il semble qu'il n'y ait aucun moyen intégré d'émuler le comportement générique que nous avions précédemment NUGET pack avec dotnet pack, ni moyen d'obtenir le <Version> balise du fichier de projet.

J'ai donc créé une nouvelle tâche de construction VSTS qui fait ceci: VersionTaskReader dans le MarketPlace.

Cette extension peut être pointée vers un .csproj ou .vbproj et définira une variable d'environnement VERSION et VERSION_BUILD qui a le BUILDID ajouté. Vous pouvez éventuellement ajouter un préfixe pour rendre chaque instance différente si nécessaire.

Par exemple, si votre projet contient <Version>1.1</Version> puis le VERSION_BUILD serait quelque chose comme 1.1.8680

Puis le dotnet pack la tâche peut utiliser la variable d'environnement VERSION_BUILD dans l'écran des options de version, de sorte que le numéro de version s'incrémente automatiquement.

5
Quango

Vous pouvez d'abord sélectionner Use an environment variable Pour Versionnage automatique des packages , utilisez votre variable définie telle que temp ($(build.buildNumber)) as Variable d'environnement .

enter image description hereenter image description here

Plus de détails jetez un oeil à ce lien: Clarification du numéro de build du paquetage automatique du pack Dotnet

Une autre façon utilise le champ "arguments" dans la tâche CLI dotnet, vous pouvez passer des arguments supplémentaires au cli dotnet.

L'utilisation de --version-suffix $(Build.BuildNumber) passera le numéro de build comme suffixe de version. Assurez-vous qu'aucun élément <version> N'est défini dans votre csproj, mais plutôt un élément <versionprefix>. La version construite ressemblera à versionprefix-versionsuffix, Donc par exemple, si vous avez <versionprefix>1.2.3</versionprefix> Et le numéro de build 201805002, La version construite sera 1.2.3-201805002. Dans ce cas, ne sélectionnez pas la version automatique du package.

9
PatrickLu-MSFT