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

.NET Core 3.0预览版Blazor托管项目添加EF Core驱动构建报错

解决Blazor Hosted项目添加EF Core到Shared后的ILLink构建错误

我之前也碰到过一模一样的问题,这个错误是Blazor的代码裁剪工具(ILLink)处理EF Core程序集时引发的,结合你的场景,原因和解决方法如下:

问题根源

  1. ILLink裁剪逻辑冲突:Blazor WebAssembly项目会自动用ILLink裁剪未使用的代码来缩小包体积,但EF Core大量依赖反射、动态类型生成,ILLink无法识别这些动态引用,误删了必要的代码,导致处理程序集时崩溃(退出代码-532462766就是这个场景的典型错误)。
  2. 架构设计不合理:Shared项目是Client和Server共享的,而Client是WebAssembly环境,本身不支持直接运行EF Core(没法直接连接数据库,也缺少对应的运行时组件),所以EF Core的依赖根本不应该出现在Shared项目里。

正确解决步骤

1. 移除Shared项目中的EF Core依赖

右键点击你的Blazor10.Shared项目 → 选择「管理NuGet程序包」,卸载所有EF Core相关的包(包括Microsoft.EntityFrameworkCore.SqlServer、Microsoft.EntityFrameworkCore、Microsoft.EntityFrameworkCore.Relational等)。

2. 将EF Core依赖迁移到Server项目

右键点击Blazor10.Server项目 → 「管理NuGet程序包」,安装你需要的EF Core包(建议使用和.NET Core 3.0 Preview4匹配的EF Core预览版本,比如3.0-preview4,避免跨版本依赖冲突)。

3. 调整项目结构

  • 把DbContext类以及所有和数据库访问相关的代码从Shared项目移到Server项目中
  • Shared项目只保留实体类、DTO、业务接口等不需要EF依赖的通用代码

(可选)特殊场景的兼容处理(不推荐)

如果确实有特殊需求必须在Shared项目中保留EF相关类型(比如实体配置类),你可以通过配置ILLink来禁止裁剪EF的程序集:

  1. 在Blazor10.Client项目中新建一个linker.xml文件
  2. 将文件的「生成操作」设置为「嵌入的资源」
  3. 写入以下配置:
<linker>
  <assembly fullname="Microsoft.EntityFrameworkCore" preserve="all" />
  <assembly fullname="Microsoft.EntityFrameworkCore.Relational" preserve="all" />
  <assembly fullname="Microsoft.EntityFrameworkCore.SqlServer" preserve="all" />
</linker>

但还是强烈建议遵循Blazor Hosted的架构设计,让Server负责数据访问,Shared只做通用模型共享,这样能避免很多不必要的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 06:37:51