Ili*_*pov 7 xamarin.ios xamarin.forms azure-pipelines
我们拥有适用于 iOS 和 UWP 项目的 Xamarin.Forms 解决方案。我们使用 Azure 管道来构建 iOS 项目。直到昨天一切都工作正常。现在,构建在 NuGet Restore 步骤失败,并出现错误:
##[错误]nuget 命令失败,退出代码(1) 和错误(/Users/runner/work/1/s/"MyProjectName.UWP".csproj :错误 MSB4057:目标“_IsProjectRestoreSupported”不存在于项目。
我们可以看到,尝试在 Mac OS 构建主机上恢复 UWP 项目的 NuGet 包时会出现问题。图片:macOS-11
解决方法是将其从解决方案中排除,但我们将其用于测试目的,这对我们来说不是一个好的选择。
:“ - 任务:MSBuild@1 输入:解决方案:'PathToIosProject/myproject.iOS.csproj' 配置:'$(BuildConfiguration)' msbuildArguments: /t:restore
“ - 任务:XamariniOS@2输入:solutionFile:PathToIosProject/myproject.iOS.csproj'配置:'$(BuildConfiguration)'packageApp:truesigningIdentity:$(APPLE_CERTIFICATE_SIGNING_IDENTITY)
我们已经设法解决了这个问题。其根本原因似乎是 MacOS 管道构建代理中 mono 框架的更新。为了修复它,我们需要一个脚本来下载和安装旧版本的 Mono 框架,作为构建管道的第一步,如下所示: 链接到管道任务照片
这是任务中使用的 bash 脚本的代码:
#!/bin/bash 设置 -ex
MONO_MACOS_PKG_DOWNLOAD_URL='https://download.mono-project.com/archive/6.12.0/macos-10-universal/MonoFramework-MDK-6.12.0.100.macos10.xamarin.universal.pkg'
mkdir -p /tmp/mono-install cd /tmp/mono-install
单声道版本
wget -q -O ./mono-installer.pkg "$MONO_MACOS_PKG_DOWNLOAD_URL"
sudo installer -pkg ./mono-installer.pkg -target /
单声道版本
ls -alh /Library/Frameworks/Mono.framework/Versions/Current
昨天我们的 iOS (macos-11) 和 Android (macos-10.15) 管道也遇到了同样的问题。
Mono 的问题21180似乎是根本原因,在更新 MacO 虚拟环境的 Mono 版本的拉取请求中也引用了该问题。关于这个工作流程测试,我们给了 msbuild 一个机会,并且它有效。
解决方案:
我们直接使用 MSBuild,而不是 NuGet 恢复。
- task: MSBuild@1
inputs:
solution: 'App.sln'
configuration: 'Release'
msbuildArguments: /t:restore
Run Code Online (Sandbox Code Playgroud)
查看日志文件,MSBuild 忽略 UWP 项目。这是 NuGet 在较旧的 mono 版本 6.12.0.125 中的行为。忽略 UWP-Project 没有问题,因为它只能在 Windows 环境上构建。
节点 1 上的项目“/Users/runner/work/1/s/App.sln”(恢复目标)。ValidateSolutionConfiguration:构建解决方案配置“Release|Any CPU”。/Library/Frameworks/Mono.framework/Versions/6.12.0/lib/mono/msbuild/Current/bin/NuGet.targets(315,5):警告:跳过项目“/Users/runner/work/1/”的恢复s/App/App.UWP/App.UWP.csproj'。项目文件可能无效或缺少恢复所需的目标。[/Users/runner/work/1/s/App.sln]
一些附加信息:
NuGet 还原任务使用 msbuild 查找所有引用的包。如果失败,它将使用 packages.config 文件作为后备,管道步骤不会失败。
相反,我们在 Android 和 iOS 的构建步骤中遇到了错误:
错误 NETSDK1004:找不到资产文件“/Users/runner/work/1/s/../obj/project.assets.json”。运行 NuGet 包还原来生成此文件。
| 归档时间: |
|
| 查看次数: |
2000 次 |
| 最近记录: |