Azure Pipelines构建Xamarin.Forms iOS项目时NuGet恢复出现MSB4057错误
macOS主机Xamarin.Forms iOS构建NuGet恢复失败解决方案
该报错根因为macOS环境的MSBuild不包含UWP项目专属的恢复目标,全解决方案执行NuGet恢复时会尝试调用UWP项目不存在的_IsProjectRestoreSupported目标,触发失败:
##[error]The nuget command failed with exit code(1) and error(/Users/runner/work/1/s/"MyProjectName.UWP".csproj : error MSB4057: The target "_IsProjectRestoreSupported" does not exist in the project。
以下三种方案均不需要移除UWP项目即可解决问题:
方案1:指定仅恢复iOS项目的NuGet包
修改Azure Pipelines的NuGet Restore步骤,不再直接指向整个.sln解决方案文件,改为仅指定iOS项目的.csproj路径,示例YAML配置如下:
- task: NuGetCommand@2 inputs: restoreSolution: '**/MyProjectName.iOS.csproj' # 替换为你的iOS项目实际路径
该方案不会改动解决方案结构,仅在iOS构建环节跳过UWP项目的恢复流程。
方案2:使用解决方案生成筛选器排除UWP项目
- 打开解决方案在Visual Studio中新建专属生成配置,命名为
iOS-Release,配置中仅勾选iOS项目的生成选项,取消UWP项目的生成勾选,保存配置 - 修改NuGet Restore步骤,添加参数指定使用该专属配置:
nuget restore MyProjectName.sln -p:Configuration=iOS-Release - 也可直接在恢复命令中添加UWP项目排除规则:
nuget restore MyProjectName.sln -p:ExcludeProjects="**/*.UWP.csproj"
方案3:修改UWP项目配置兼容非Windows环境
编辑UWP项目的.csproj文件,在文件末尾的</Project>标签之前添加如下判断逻辑,在非Windows系统下自动补全缺失的目标:
<PropertyGroup Condition=" '$(OS)' != 'Windows_NT' "> <Target Name="_IsProjectRestoreSupported" Returns="@(_ValidProjectsForRestore)"/> </PropertyGroup>
该配置不会影响Windows环境下UWP项目的正常生成、测试与NuGet恢复操作。
内容的提问来源于stack exchange,提问作者Iliyan Popov
相关产品推荐
相关产品推荐

