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

.NET Framework 4.7.2开启Generate serialization assembly时加载Windows.winmd失败

问题原因
  • Windows.winmd是Windows Runtime(WinRT)的元数据文件,不属于标准.NET程序集范畴。
  • Release构建开启Generate serialization assembly时,.NET Framework的序列化工具sgen.exe会扫描所有引用的程序集以生成序列化代码,但该工具不支持读取WinRT元数据文件,直接触发"操作不支持"的加载错误(对应HRESULT: 0x80131515)。
  • Debug模式下默认不会自动生成序列化程序集(默认配置为Auto或Off),因此不会触发该问题。
解决方案

方案1:单独跳过WinMD文件的序列化分析

在项目的.csproj文件中,给Windows.winmd的引用添加GenerateSerializationAssemblies="Off"属性,让sgen工具跳过对该文件的处理:

<Reference Include="Windows">
  <HintPath>packages\thepackage\lib\net47\Windows.winmd</HintPath>
  <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
</Reference>

方案2:全局关闭序列化程序集生成

如果项目不需要自动生成序列化程序集,可直接修改全局配置:

  • 右键项目 → 属性 → 生成 → 点击"高级"按钮 → 将Generate serialization assembly设置为Off
    或者直接在.csproj中添加如下配置(针对Release模式):
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
  <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
</PropertyGroup>

方案3:按需保留序列化生成(复杂场景)

如果必须保留序列化程序集生成,可通过自定义MSBuild任务,在sgen.exe执行前临时移除Windows.winmd的引用,执行完成后再恢复该引用。此方式仅推荐对序列化有强依赖的场景,实现复杂度较高。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 22:46:01