You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移至.NET 6后VS 2022编译遇sgen.exe报错无法禁用XmlSerialization

.NET 6项目迁移到VS 2022 sgen.exe路径过长报错解决方案

该问题出现的核心原因是.NET Core/.NET 5+的SDK风格项目和传统.NET Framework项目的配置逻辑不同,原针对.NET Framework生效的<GenerateSerializationAssemblies>配置默认不会作用于.NET Core及更高版本的项目,因此旧配置会失效。以下是经过验证的可行解决方案:

  • 方案1:在项目csproj文件中添加适配.NET Core+的禁用配置
    在项目的csproj文件全局PropertyGroup节点下添加以下3项配置,覆盖所有编译场景下的sgen触发逻辑:
    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
    <SGenUseProxyTypes>false</SGenUseProxyTypes>
    <SGenGenerateSerializationAssembliesMode>None</SGenGenerateSerializationAssembliesMode>
    
    如果你的项目针对不同编译环境(Debug/Release、x86/x64/AnyCPU)配置了带条件的PropertyGroup节点,需要保证上述配置要么放在全局无限制的PropertyGroup下,要么每个条件PropertyGroup下都进行配置,避免部分场景下仍触发sgen执行。
  • 方案2:用全局配置文件统一禁用整个解决方案的sgen执行
    如果单个项目修改不生效,可以在解决方案根目录新建名为Directory.Build.props的文件,写入以下内容,该配置会对整个解决方案下的所有项目自动生效:
    <Project>
      <PropertyGroup>
        <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
        <SGenGenerateSerializationAssembliesMode>None</SGenGenerateSerializationAssembliesMode>
      </PropertyGroup>
    </Project>
    
  • 方案3:启用系统长路径支持(若需要保留序列化程序集生成功能)
    如果你的业务确实需要生成XML序列化程序集,无法关闭该功能,可以通过开启系统长路径支持解决:
    1. 按下Win+R输入regedit打开注册表编辑器,定位到路径HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
    2. 找到名为LongPathsEnabled的DWORD值,若不存在则手动新建,将其数值数据设置为1,基数选择十六进制
    3. 重启电脑让注册表配置生效
    4. 额外在项目csproj的PropertyGroup节点添加以下配置,告知编译器支持长路径:
    <AppContextSwitchOverrides>Switch.System.IO.UseLegacyPathHandling=false;Switch.System.IO.BlockLongPaths=false</AppContextSwitchOverrides>
    

注意:所有配置修改完成后,需要先清理解决方案,手动删除项目根目录下的bin、obj文件夹后再重新编译,避免旧缓存配置干扰结果。

内容的提问来源于stack exchange,提问作者Adamant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 23:24:01