J'ai passé la majeure partie de quelques heures à essayer de trouver un moyen d'incrémenter automatiquement les versions dans un .NETCoreApp 1.1 (Visual Studio 2017).
Je sais que le AssemblyInfo.cs est créé dynamiquement dans le dossier: obj/Debug/netcoreapp1.1/
Il n'accepte pas l'ancienne méthode de:
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.*")]
Si je configure le projet sur package, je peux y définir des versions, mais cela semble être utilisé pour créer le fichier AssemblyInfo.cs.
Ma question est la suivante: est-ce que quelqu'un a compris comment contrôler la version dans les projets .NET Core (ou .NETStandard d'ailleurs).
/p:
drapeaudotnet msbuild
dans votre script de construction et définir la version, la société, les droits d'auteur ... toutes ces bonnes choses.<Deterministic>False</Deterministic>
dans le csproj pour l'utiliser. (ou utilisez toute autre logique MSbuild pour calculer<VersionPrefix>
/<Version>
)Réponses:
Je cherchais un incrémenteur de version pour une application Net Core dans VS2017 en utilisant le format de configuration csproj.
J'ai trouvé un projet appelé dotnet bump qui fonctionnait pour le format project.json, mais j'ai eu du mal à trouver une solution pour le format .csproj. Le rédacteur de la bosse dotnet a en fait proposé la solution pour le format .csproj et cela s'appelle MSBump.
Il existe un projet sur GitHub pour cela à:
https://github.com/BalassaMarton/MSBump
où vous pouvez voir le code et son disponible sur Nuget aussi. Recherchez simplement MSBump sur Nuget.
la source
Ajouter
<Deterministic>False</Deterministic>
dans une<PropertyGroup>
section de .csprojLa solution de contournement pour que AssemblyVersion * fonctionne est décrite dans «Message d'erreur déroutant pour le caractère générique dans [AssemblyVersion] sur .Net Core # 22660»
Les raisons pour lesquelles les développeurs .Net Core considèrent les Builds déterministes comme bénéfiques décrites dans http://blog.paranoidcoding.com/2016/04/05/deterministic-builds-in-roslyn.html et les compilateurs devraient être déterministes: les mêmes entrées génèrent les mêmes sorties # 372
Cependant, si vous utilisez TeamCity, TFS ou un autre outil CI / CD, il est probablement préférable de garder le numéro de version contrôlé et incrémenté par eux et de passer à la construction en tant que paramètre (comme cela a été suggéré dans d'autres réponses), par exemple
Numéro de package pour les packages NuGet
la source
Si vous utilisez Visual Studio Team Services / TFS ou un autre processus de génération de CI pour intégrer le contrôle de version, vous pouvez utiliser l'
Condition
attribut de msbuild , par exemple:Cela indiquera au compilateur .NET Core d'utiliser tout ce qui se trouve dans la
BUILD_BUILDNUMBER
variable d'environnement si elle est présente, ou de revenir en arrière0.0.1-local
si vous effectuez une compilation sur votre ordinateur local.la source
J'ai trouvé une solution qui fonctionnait presque de la même manière que l'ancien attribut AssemblyVersion avec étoile (*) - AssemblyVersion ("1.0. ") *
Les valeurs pour AssemblyVersion et AssemblyFileVersion se trouvent dans le fichier .csproj du projet MSBuild (pas dans AssemblyInfo.cs ) en tant que propriété FileVersion (génère AssemblyFileVersionAttribute ) et AssemblyVersion (génère AssemblyVersionAttribute ). Dans le processus MSBuild, nous utilisons notre tâche MSBuild personnalisée pour générer les numéros de version, puis nous remplaçons les valeurs de ces FileVersion et AssemblyVersion propriétés par les nouvelles valeurs de task.
Nous créons donc d'abord notre tâche MSBuild personnalisée GetCurrentBuildVersion :
Hériter de la classe de tâche Microsoft.Build.Utilities.Task classe de Microsoft.Build.Utilities.Core package NuGet. Il prend la propriété BaseVersion (facultative) en entrée et renvoie la version générée dans la propriété de sortie Version. La logique pour obtenir les numéros de version est la même que celle du contrôle de version automatique .NET (le numéro de build correspond au nombre de jours depuis le 1/1/2000 et la révision est d'une demi-seconde depuis minuit).
Pour créer cette tâche MSBuild, nous utilisons le type de projet de bibliothèque de classes .NET Standard 1.3 avec cette classe.
Le fichier .csproj peut ressembler à ceci:
Ce projet de tâche est également disponible dans mon GitHub holajan / DC.Build.Tasks
Nous configurons maintenant MSBuild pour utiliser cette tâche et définissons les propriétés FileVersion et AssemblyVersion . Dans le fichier .csproj, cela ressemble à ceci:
Choses importantes ici:
L'avantage de cette solution est qu'elle fonctionne non seulement à partir de builds sur le serveur de build, mais également dans les builds manuels de dotnet build ou de Visual Studio.
la source
DateTime.UtcNow
place de laDateTime.Now
méthodeGetCurrentBuildVersionString()
en particulier si le code est exécuté sur des machines de construction automatisées. Ils peuvent fonctionner à 2 heures du matin ou à 3 heures du matin lorsque votre ordinateur passe à l'heure d'été ou à l'heure d'été. DansDateTime.Now
ce scénario, vous pourriez reculer en termes de version. Certes, c'est un cas de coin et j'avoue aussi que je suis pointilleux. :-) En outre, le problème disparaît également si vous configurez le même fuseau horaire sur toutes les machines de construction et ne pas vous ajuster à l'heure d'été.Vous pouvez utiliser une fonction de propriété MSBuild pour définir le suffixe de version en fonction de la date actuelle:
Cela affichera un package avec un nom comme: PackageName.1.0.0-pre20180807-1711.nupkg .
Plus de détails sur les fonctions de propriété MSBuild: https://docs.microsoft.com/en-us/visualstudio/msbuild/property-functions
Le
Version
est formé à partir de la combinaison deVersionPrefix
etVersionSuffix
, ou siVersionSuffix
est vide,VersionPrefix
uniquement.la source
J'ai accepté la réponse ci-dessus parce que @Gigi est correct (à partir de maintenant) mais j'ai été ennuyé et j'ai proposé les scripts PowerShell suivants.
J'ai d'abord le script dans mon dossier de solution (UpdateBuildVersion.ps1):
J'ai ajouté ceci au fichier csproj:
Même si son ensemble est un PreBuildEvent, le fait est que les numéros de version ne sont pas mis à jour avant que le fichier n'ait été chargé en mémoire, de sorte que le numéro de version ne sera pas reflété jusqu'à la prochaine génération. En fait, vous pourriez le changer en un PostBuildEvent et cela aurait le même effet.
J'ai également créé les deux scripts suivants: (UpdateMinorVersion.ps1)
(UpdateMajorVersion.ps1)
la source
dotnet build /p:AssemblyVersion=1.2.3.4
Je répondais à: "Quelqu'un at-il trouvé comment contrôler la version dans les projets .NET Core (ou .NETStandard d'ailleurs)." J'ai trouvé cette question en essayant de résoudre ce problème dans le contexte d'une construction CI. Je voulais définir la version de l'assembly sur le numéro de version CI.
la source
Ces valeurs sont maintenant définies dans le
.csproj
fichier:Ce sont les mêmes valeurs que vous voyez si vous allez dans l' onglet Package dans les paramètres du projet. Bien que je ne pense pas que vous puissiez utiliser
*
pour auto-incrémenter la version, ce que vous pouvez faire est d'introduire une étape de post-traitement qui remplace les versions pour vous (par exemple dans le cadre de votre intégration continue).la source
J'ai créé un outil CLI simple pour définir les chaînes de version .csproj .NET Core ici . Vous pouvez le combiner avec des outils comme GitVersion pour le changement de version automatique pendant les builds CI, si c'est ce que vous recherchez.
la source
Pour activer la gestion des versions de votre .Net Core / .Net Quel que soit le projet basé sur votre configuration GIT, en utilisant la fonctionnalité balises / describe de GIT.
J'utilise un fichier Prebuild.targets.xml qui se trouve dans le dossier racine du projet et inclus dans le fichier csproj comme:
Utilisez la balise "GenerateAssembyInfo" pour désactiver la génération automatique d'informations d'assemblage.
Ensuite, Prebuild.targets.xml générera un fichier CommonAssemblyInfo.cs dans lequel vous pourrez inclure les balises de version souhaitées en fonction de votre version GIT
REMARQUE: j'ai trouvé le Prebuilds.targets.xml ailleurs, donc je n'ai pas pris la peine de le nettoyer.)
Le fichier Prebuild.targets.xml:
EDIT: Si vous construisez avec MSBUILD, le
Pourrait vous causer des ennuis, utilisez
au lieu
la source
Vous pouvez faire ce qui suit, dans le fichier csproj. Je n'ai pas compris le calcul. J'ai trouvé ça ailleurs sur stackoverflow. Mais cela fonctionne et vous donnera quelque chose de similaire à 1.0. * Pour la version.
la source
L'extension Versions automatiques pour Visual Studio prend désormais en charge l'auto-incrémentation .Net Core et .Net Standard dans une interface utilisateur simple.
https://marketplace.visualstudio.com/items?itemName=PrecisionInfinity.AutomaticVersions
la source
Merci à @joelsand de m'avoir orienté dans la bonne direction.
J'ai dû modifier légèrement sa réponse car lorsque la construction DevOps a été exécutée, j'ai eu l'exception suivante
J'ai dû ajouter le $ (BUILD_BUILDNUMBER) à la fin de la section major.minor.build. Pour dédupliquer la version actuelle, j'utilise également un préfixe de version:
la source
Nous pouvons utiliser un paramètre spécial pour
dotnet publish -- version-suffix 1.2.3
Pour la version de fichier:
Pour la version:
https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-publish?tabs=netcore21
la source
Je pense que cette réponse de @joelsand est la bonne réponse pour définir le numéro de version pour dotnet core fonctionnant sur VSTS
Pour ajouter plus d'informations sur cette réponse,
BUILD_BUILDNUMBER
est en fait une variable prédéfinie .Il s'avère qu'il existe 2 versions de variable prédéfinie.
L'un est build.xxxx, l'autre est BUILD_XXXX.
Vous ne pouvez utiliser que
Environment Variable Name
dans cproj.la source
build.xxxx
utilisé sur le front-end pour le référencement dans un pipeline etBUILD_XXXX
est-ce la même valeur mais avec une syntaxe légèrement modifiée requise pour référencer la variable dans PS?