在项目文件中使用 XmlPoke 更新源文件已停止工作 [标题已更新]
Use of XmlPoke in project file to update source file has stopped working [title updated]
多年来在项目构建期间更新版本号。
在 Visual Studio 中,我们在 c 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 已更改为将所有项目文件加载到内存中作为第一步,因此现在将忽略对磁盘上文件的任何更改。
Microsoft (R) 构建引擎版本 16.11.1+3e40a09f8 for .NET Framework
表现出这种行为
上次运行正常 msbuild 15.0
[这是原文 post - 请忽略]:
我们正在构建 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 管道
图片:macOS-10.15
代理:托管代理
到
图片:macOS-11
还有其他人看到过这个问题吗?
解决方案是避免在 msbuild 期间更改任何源文件。
而是使用预构建任务来进行任何源更改,例如设置版本号。
多年来在项目构建期间更新版本号。 在 Visual Studio 中,我们在 c 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 已更改为将所有项目文件加载到内存中作为第一步,因此现在将忽略对磁盘上文件的任何更改。
Microsoft (R) 构建引擎版本 16.11.1+3e40a09f8 for .NET Framework 表现出这种行为
上次运行正常 msbuild 15.0
[这是原文 post - 请忽略]: 我们正在构建 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 管道 图片:macOS-10.15 代理:托管代理 到 图片:macOS-11
还有其他人看到过这个问题吗?
解决方案是避免在 msbuild 期间更改任何源文件。 而是使用预构建任务来进行任何源更改,例如设置版本号。