CSharpMigrationsGenerator 和 SqlServerMigrationsSqlGenerator 发生了什么

What happened to CSharpMigrationsGenerator and SqlServerMigrationsSqlGenerator

将现有项目从 EF Core 5 升级到 EF Core 6 后,一些自定义将不再编译,特别是对 CSharpMigrationsGenerator 和 SqlServerMigrationsSqlGenerator 的自定义 类。尽管名称空间是正确的,但 Visual Studio 强调了对它们的引用,并且似乎不知道我在说什么。查看 EF Core 源代码,类 是它们应该在的位置,为什么我的项目中看不到它们?

这是 NuGet 更新包引用的副作用。 Microsoft.EntityFrameworkCore.Migrations.Design 命名空间来自 Microsoft.EntityFrameworkCore.Design 包,它想像分析器一样安装自己。

更新参考后,您的 csproj 文件将如下所示:

<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.0">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

这是不正确的。这就是您引用分析器的方式。它使该包中的代码可用于 Visual Studio,但不可用于您的代码。您想要的是像这样的普通旧包参考:

<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.0" />

修复您的 csproj 文件将使 类 再次可用于您的代码。