Skip to content

[NET9] VersionName und VersionCode not filled when version is build dynamically #10430

@twelve-cgn

Description

@twelve-cgn

Description

I want to generate the versioning of the app. Unfortunately, the generation is executed (multiple times), but 1.0 .0 or 1 is always written to the AndroidManifest.

I have already tried several BeforeTargets (Build, PrepareForBuild, AssignTargetPaths, GenerateAndroidManifest, AssignProjectConfiguration) and also various assignments. But unfortunately, nothing works.

Depending on which BeforeTarget I try, the generation is performed 1-3 times, which I can see from the output in the log. But the AndroidManifest still shows 1.0.0 or 1. I haven't tried it for iOS yet.

Here is the snippet I am currently using:

<!--START:VERSIONIERUNG-->

   <PropertyGroup>
      <!-- Feste Major/Minor Version -->
      <MajorVersion>2</MajorVersion>
      <MinorVersion>1</MinorVersion>

      <!-- Zweistellig formatieren -->
      <FormattedMajorVersion>$([System.String]::Format('{0:D2}', $(MajorVersion)))</FormattedMajorVersion>
      <FormattedMinorVersion>$([System.String]::Format('{0:D2}', $(MinorVersion)))</FormattedMinorVersion>

      <!-- Buildnummer-Datei -->
      <BuildCounterFile>$(MSBuildProjectDirectory)\buildcounter.txt</BuildCounterFile>
      
   </PropertyGroup>

   <!-- Ziel, das vor dem Build läuft und OS-Major-Version ausliest -->
   <Target Name="SetApplicationVersions" BeforeTargets="PrepareForBuild">
      <!-- Lese vorhandene Buildnummer -->
      <ReadLinesFromFile File="$(BuildCounterFile)" Condition="Exists('$(BuildCounterFile)')">
         <Output TaskParameter="Lines" ItemName="BuildNumberLines"/>
      </ReadLinesFromFile>

      <PropertyGroup>

         <BuildNumber>@(BuildNumberLines)</BuildNumber>
         <BuildNumber>$([MSBuild]::Add($(BuildNumber),1))</BuildNumber>
         <BuildNumber>$([System.String]::Format('{0:D3}', $(BuildNumber)))</BuildNumber>

         <_PlatformVersion>$(SupportedOSPlatformVersion)</_PlatformVersion>
         <_PlatformVersion Condition="'$(_PlatformVersion)' == ''">0.0</_PlatformVersion>
         <PlatformMajor>$([System.Version]::Parse('$(_PlatformVersion)').Major)</PlatformMajor>
         <FormattedPlatformMajor>$([System.String]::Format('{0:D2}', $(PlatformMajor)))</FormattedPlatformMajor>

         <!-- Automatische Buildnummer (MSBuild setzt Rev:rrr pro Tag hoch) -->
         <BuildDate>$([System.DateTime]::Now.ToString("yyMMdd"))</BuildDate>
         <FormattedBuildNumber>$(BuildDate)$(BuildNumber)</FormattedBuildNumber>

         <!-- Interne Version für Store -->
         <!-- Beispiel: OS-Major + Major + Minor + Buildnummer -->
         <!--ApplicationVersion / versionCode / CFBundleVersion-->
         <ApplicationVersion>$(FormattedPlatformMajor)$(FormattedMajorVersion)$(FormattedMinorVersion)$(FormattedBuildNumber)</ApplicationVersion>
         
         <!-- Anzeigeversion für Nutzer -->
         <!--ApplicationDisplayVersion / versionName / CFBundleShortVersionString-->
         <ApplicationDisplayVersion>$(MajorVersion).$(MinorVersion).$(FormattedBuildNumber)</ApplicationDisplayVersion>

         <!-- Android -->
         <AndroidVersionCode>$(ApplicationVersion)</AndroidVersionCode>
         <AndroidVersionName>$(ApplicationDisplayVersion)</AndroidVersionName>

         <!-- iOS -->
         <CFBundleVersion>$(ApplicationVersion)</CFBundleVersion>
         <CFBundleShortVersionString>$(ApplicationDisplayVersion)</CFBundleShortVersionString>
         
      </PropertyGroup>

      <!-- Schreibe neue Buildnummer zurück -->
      <WriteLinesToFile
          File="$(BuildCounterFile)"
          Lines="$(BuildNumber)"
          Overwrite="true"/>

      <!-- MAUI Manifest Properties setzen -->
      <ItemGroup>
         <ManifestProperties Include="versionName=$(ApplicationDisplayVersion)"/>
         <ManifestProperties Include="versionCode=$(ApplicationVersion)"/>
      </ItemGroup>
      
      <!-- Nur zur Kontrolle -->
      <Message Text=">>> BuildNumber: $(BuildNumber)" Importance="high" />
      <Message Text=">>> BuildDate: $(BuildDate)" Importance="high" />
      <Message Text=">>> FormattedBuildNumber: $(FormattedBuildNumber)" Importance="high" />
      <Message Text=">>> ApplicationDisplayVersion: $(ApplicationDisplayVersion)" Importance="high" />
      <Message Text=">>> ApplicationVersion: $(ApplicationVersion)" Importance="high" />
      
   </Target>

   <Target Name="SetAndroidApplicationVersions" BeforeTargets="PrepareForBuild">
      <PropertyGroup>
         <AndroidVersionName>$(ApplicationDisplayVersion)</AndroidVersionName>
         <AndroidVersionCode>$(ApplicationVersion)</AndroidVersionCode>
      </PropertyGroup>

      <!-- Nur zur Kontrolle -->
      <Message Text=">>> AndroidVersionName=$(AndroidVersionName)" Importance="high" />
      <Message Text=">>> AndroidVersionCode=$(AndroidVersionCode)" Importance="high" />
   </Target>

   <!-- ENDE: AUTOMATISCHE VERSIONIERUNG -->

Steps to Reproduce

No response

Link to public reproduction project repository

No response

Version with bug

Unknown/Other

Is this a regression from previous behavior?

Not sure, did not test other versions

Last version that worked well

Unknown/Other

Affected platforms

Android

Affected platform versions

android 35.0.92/9.0.100 SDK 9.0.300, VS 17.14.36401.2

Did you find any workaround?

No response

Relevant log output

Metadata

Metadata

Assignees

No one assigned

    Labels

    need-infoIssues that need more information from the author.question

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions