安装.NET 9 SDK导致MacOS上现有.NET 7项目编译失败
在MacOS环境下安装.NET 9.0 SDK后,原有.NET 7.0项目无法正常编译。该问题最初在Azure DevOps托管代理添加.NET 9.0 SDK时发现,且可在本地Mac设备复现。
第一个错误:NETSDK1202
安装.NET 9.0后,原本的警告转为错误:
/usr/local/share/dotnet/sdk/9.0.102/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.EolTargetFrameworks.targets(38,5):
错误 NETSDK1202:工作负载“net7.0-macos”已停止支持,未来将不再接收安全更新。有关支持政策的更多信息,请参考相关文档。
解决方法
在项目的.csproj文件中添加以下属性即可解决:
<CheckEolWorkloads>false</CheckEolWorkloads>
第二个错误:NETSDK1135
解决上述问题后,出现新的编译错误:
/usr/local/share/dotnet/sdk/9.0.102/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.TargetFrameworkInference.targets(230,5):
错误 NETSDK1135:SupportedOSPlatformVersion 10.14 不能高于 TargetPlatformVersion 1.0。
目前该错误无法解决,原本TargetPlatformVersion(TPV)会从TargetFramework自动推断,但现在该机制似乎失效或发生了变化。
当前项目的.csproj内容
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net7.0</TargetFramework> <RootNamespace>xxx</RootNamespace> <OutputType>Exe</OutputType> <Nullable>enable</Nullable> <ImplicitUsings>true</ImplicitUsings> <AssemblyName>xxx</AssemblyName> <CheckEolWorkloads>false</CheckEolWorkloads> <CheckEolTargetFramework>false</CheckEolTargetFramework> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <CreatePackage>false</CreatePackage> <UseSGen>false</UseSGen> <LinkMode>None</LinkMode> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <CreatePackage>true</CreatePackage> <UseSGen>false</UseSGen> <LinkMode>None</LinkMode> </PropertyGroup> <ItemGroup> <ProjectReference Include="..\Common-RlServerApis\Common-RlServerApis.csproj" /> <ProjectReference Include="..\Common-RlReferenceData\Common-RlReferenceData.csproj" /> <ProjectReference Include="..\Common-RlLogParsing\Common-RlLogParsing.csproj" /> <ProjectReference Include="..\Common-RlCrossPlatformGui\Common-RlCrossPlatformGui.csproj" /> <ProjectReference Include="..\Common-RlCommonUtil\Common-RlCommonUtil.csproj" /> </ItemGroup> </Project>
尝试过的其他方法
若将项目中的<TargetFramework>net7.0-macos</TargetFramework>改为<TargetFramework>net7.0</TargetFramework>,可避免NETSDK1135错误,但会因无法找到MacOS相关API而编译失败。
环境信息
原本仅安装.NET 7.0.20时项目可正常编译,安装.NET 9后编译失败,当前本地运行时列表如下:
% dotnet --list-runtimes Microsoft.AspNetCore.App 7.0.20 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App] Microsoft.AspNetCore.App 9.0.1 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App] Microsoft.NETCore.App 7.0.20 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App] Microsoft.NETCore.App 9.0.1 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
内容的提问来源于stack exchange,提问作者Geoff Hart

