从Xamarin迁移MAUI项目时Mac端构建报错求助
解决.NET MAUI迁移中的Mac构建错误
问题1:.NET Framework类库导致_GetRequiredWorkloads目标不存在错误
错误原因
MAUI项目在执行dotnet workload restore时,会尝试对所有引用项目执行*_GetRequiredWorkloads*目标,但你的MyModel.csproj是基于.NET Framework 4.6.1的类库,这个目标不存在于.NET Framework项目中,导致构建失败。
解决方案
无需将MyModel.csproj改为MAUI类库(.NET MAUI可直接兼容.NET Framework类库引用),只需修改MAUI项目的引用配置,让workload restore过程跳过该类库:
- 编辑
MyMauiApp.csproj,找到对MyModel.csproj的引用节点,添加DisableImplicitWorkloadReferences="true"属性:
<ProjectReference Include="..\MyModel\MyModel.csproj"> <DisableImplicitWorkloadReferences>true</DisableImplicitWorkloadReferences> </ProjectReference>
- 保存后重新执行
dotnet workload restore,再尝试构建。
问题2:改为MAUI类库后出现NETSDK1147重复报错
错误原因
- 环境中同时存在.NET 7 SDK(报错显示使用的是7.0.311),但项目基于.NET 8,SDK版本不匹配导致workload识别异常;
- MAUI类库默认包含全平台workload依赖,即使仅需iOS和Android,构建过程仍会检查Tizen workload,安装后仍可能因SDK版本问题重复触发
*NETSDK1147*错误。
解决方案
步骤1:指定项目使用.NET 8 SDK并排除Tizen平台
编辑MyMauiApp.csproj:
<Project Sdk="Microsoft.NET.Sdk.Maui"> <PropertyGroup> <TargetFrameworks>net8.0-android;net8.0-ios</TargetFrameworks> <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">21.0</SupportedOSPlatformVersion> <SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">14.2</SupportedOSPlatformVersion> <EnableTizen>false</EnableTizen> </PropertyGroup> </Project>
若已将MyModel.csproj改为MAUI类库,编辑其项目文件:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net8.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <IsWorkloadProject>false</IsWorkloadProject> </PropertyGroup> </Project>
步骤2:强制使用.NET 8 SDK执行命令
在终端中执行(替换x为已安装的.NET 8 SDK具体版本,如8.0.100):
dotnet workload restore --sdk-version 8.0.x
步骤3:清理并重新构建
dotnet clean dotnet restore dotnet build -f net8.0-ios
内容的提问来源于stack exchange,提问作者saramgsilva
相关产品推荐
相关产品推荐

