使用Release配置执行dotnet build时抛出MSB3474错误
问题描述
执行默认Debug配置构建项目无错误,但运行命令 dotnet build .\src\Burriquin\Burriquin.csproj -c=Release 时触发如下错误:
C:\Program Files\dotnet\sdk\7.0.102\Microsoft.Common.CurrentVersion.targets(3822,5): error MSB3474: The task "SGen" is not supported on the .NET Core version of MSBuild. Use the Microsoft XML Serializer Generator package instead. [C:\Users\mynameUser\Documents\MyProject\src\Burriquin\Burriquin.DB.csproj]
0 Warning(s)
1 Error(s)
项目csproj文件未针对构建配置做特殊设置,相关片段如下:
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'" />
补充说明:通过VS2022可正常构建两种配置。
解决方案
方案1:替换为官方XML序列化生成器包
安装Microsoft.XmlSerializer.Generator NuGet包,这是.NET Core/.NET 5+官方推荐的替代SGen的工具:
dotnet add .\src\Burriquin\Burriquin.DB.csproj package Microsoft.XmlSerializer.Generator
方案2:禁用SGen序列化任务
如果项目不需要XML序列化生成器,可直接在Release配置中关闭该任务,修改csproj文件:
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies> </PropertyGroup>
原因说明
VS2022在构建时会自动处理SGen的兼容逻辑,而dotnet build严格遵循.NET Core MSBuild规范,不支持旧的SGen任务,因此需要显式替换或禁用该任务。
内容的提问来源于stack exchange,提问作者juagicre

