Azure Pipelines Xamarin.Forms iOS 构建失败并出现错误 MSB4057:项目中不存在目标“_IsProjectRestoreSupported”

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

解决方法是将其从解决方案中排除,但我们将其用于测试目的,这对我们来说不是一个好的选择。

Ili*_*pov 6

  • 更新的答案 这可以使用 MSBuild 任务来解决,正如下面提到的同事一样。然而,就我而言,这仍然会导致同样的错误。调查完管道后。根本原因已确定:在 MSBuild@1 和 XamariniOS@2 任务中, 您都应该针对特定的 iOS 项目而不是解决方案文件,如下所示在此输入图像描述:

“ - 任务: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


Sim*_*air 6

昨天我们的 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 包还原来生成此文件。