ASP.NET Core 7:解决无法加载Bricelam.EntityFrameworkCore.Pluralizer程序集问题
解决Scaffold-DbContext加载Bricelam.EntityFrameworkCore.Pluralizer失败的问题
问题根源
Bricelam.EntityFrameworkCore.Pluralizer 1.0.0版本仅适配EF Core 3.x及更早版本,与你使用的EF Core 7.0.3存在兼容性冲突;同时包引用的PrivateAssets配置限制了设计时工具对该包的访问,导致无法加载程序集。
解决方案
方案1:替换为兼容EF Core 7的复数化工具
Bricelam的该包已停止维护,建议改用社区维护的适配EF Core 7的替代包:
- 卸载旧包:
Uninstall-Package Bricelam.EntityFrameworkCore.Pluralizer - 安装兼容包:
Install-Package EntityFrameworkCore.Pluralizer -Version 7.0.4 - 重新执行你的Scaffold-DbContext命令即可。
方案2:调整原包引用配置(不推荐,仍存在版本兼容风险)
若坚持使用原包,修改Infrastructure.proj中Bricelam包的引用配置,允许设计时工具访问:
<PackageReference Include="Bricelam.EntityFrameworkCore.Pluralizer" Version="1.0.0"> <!-- 调整私有资产配置,开放设计时访问权限 --> <PrivateAssets>runtime; buildtransitive</PrivateAssets> <IncludeAssets>all</IncludeAssets> </PackageReference>
修改后执行清理项目、重新还原包操作,再运行Scaffold-DbContext命令。
方案3:自定义复数化规则(最灵活可控)
若不想依赖第三方包,可自行实现EF Core的复数化服务:
- 创建复数化逻辑类:
using System.Data.Entity.Design.PluralizationServices; using System.Globalization; using Microsoft.EntityFrameworkCore.Design; public class CustomPluralizer : IPluralizer { private readonly PluralizationService _pluralizationService = PluralizationService.CreateService(CultureInfo.CurrentCulture); public string Pluralize(string name) { return _pluralizationService.Pluralize(name); } public string Singularize(string name) { return _pluralizationService.Singularize(name); } }
- 添加设计时服务注册文件
DesignTimeServices.cs:
using Microsoft.EntityFrameworkCore.Design; using Microsoft.Extensions.DependencyInjection; public class DesignTimeServices : IDesignTimeServices { public void ConfigureDesignTimeServices(IServiceCollection services) { services.AddSingleton<IPluralizer, CustomPluralizer>(); } }
- 重新执行Scaffold-DbContext命令,EF Core会自动使用自定义复数化规则。
内容的提问来源于stack exchange,提问作者Bami
相关产品推荐
相关产品推荐

