0

几年来在项目构建期间更新版本号。在 Visual Studio 中,我们在 ac sharp 项目中添加了如下内容


  <Target Name="BeforeBuild" Condition=" $(SetVersion) == true ">
    <PropertyGroup>
      <IOSBundleVersion>$([System.Text.RegularExpressions.Regex]::Match($(VersionNumber), '[^.][^.]*.[^.]*.[^.]*'))</IOSBundleVersion>
    </PropertyGroup>
    <XmlPoke XmlInputPath="Info.plist" Query="//dict/key[. = 'CFBundleVersion']/following-sibling::string[1]" Value="$(VersionNumber)" />
    <XmlPoke XmlInputPath="Info.plist" Query="//dict/key[. = 'CFBundleShortVersionString']/following-sibling::string[1]" Value="$(IOSBundleVersion)" />
  </Target>

这应该更新包含版本号的文件,然后在后续构建期间将其用作应用程序版本。

实际发生的是源文件已更新,但 msbuild 使用原始文件而不是更新后的文件。

我推测 msbuild 已更改为将所有项目文件加载到内存中作为第一步,因此现在将忽略对磁盘上文件的任何更改。

适用于 .NET Framework 的 Microsoft (R) Build Engine 版本 16.11.1+3e40a09f8 表现出此行为

最后工作正常 msbuild 15.0

[这是原始帖子 - 请忽略]:我们正在构建 Xamarin.Forms iOS 应用程序并且已经有一段时间了。我们通过参数控制 Azure Devops 构建步骤“Xamarin.iOS”中的版本号 /p:SetVersion=true /p:VersionNumber=$(Application.Version) 项目的 info.plist 部分设置基线版本 (4.00. 00.00) 正在设置 Application.Version 参数 (Application.Version == 4.00.00.03) 并且日志显示正在使用该参数。但是,“Apple App Store Release”报告错误 ITMS-90189:“冗余二进制上传。您已经为版本号“4.0.0”上传了内部版本号为“4.0.0.0”的版本。我已经手动检查了版本通过 iOS Transporter app 上传构建的 .ipa 工件。这表明 .ipa 具有基线版本,而不是传递给 SetVersion 的值。

当我们最近将托管代理从池升级时开始发生这种情况:Azure Pipelines 图像:macOS-10.15 代理:托管代理到图像:macOS-11

有没有其他人看到这个问题?

4

1 回答 1

0

解决方案是避免在 msbuild 期间更改任何源文件。而是使用预构建任务来进行任何源更改,例如设置版本号。

于 2021-11-17T13:02:10.863 回答