无法检索项目元数据。确保它是基于 MSBuild 的 .NET Core 项目。(迁移)

Eug*_*ukh 9 .net c# entity-framework entity-framework-core

我有一个具有这种结构的项目 在此处输入图片说明

TooSeeWeb.Infrastructure 用于迁移。

当我尝试使用此命令运行迁移时

dotnet ef migrations add ExampleMigration -s ..\TooSeeWeb
Run Code Online (Sandbox Code Playgroud)

我有这个错误

无法检索项目元数据。确保它是基于 MSBuild 的 .NET Core 项目。如果您使用自定义 BaseIntermediateOutputPath 或 MSBuildProjectExtensionsPath 值,请使用 --msbuildprojectextensionspath 选项

我该如何解决这个问题?

Cod*_*ife 31

这是 2 年前的文章,但我也处于同样的情况,所以它仍然具有相关性。这是 Google 上针对此错误的第一个结果。

因此,我可以在您的屏幕截图中看到您不在标准 Windows Visual Studio 中,因此我假设您不在 Windows 上(在如何编写文件路径方面存在差异)。我还可以看到您使用了..\TooSeeWeb反斜杠。

解决方案:将所有内容更改\/正斜杠,因此在您的情况下我想它会是:

dotnet ef migrations add ExampleMigration -s ../TooSeeWeb
Run Code Online (Sandbox Code Playgroud)

对我来说,它在 Windows 上运行,但在 macOS (OS X) 上失败并出现以下错误:

无法检索项目元数据。确保它是一个 SDK 风格的项目。如果使用自定义 BaseIntermediateOutputPath 或 MSBuildProjectExtensionsPath 值,请使用 --msbuildprojectextensionspath 选项。

此外,它还提供了信息(提供了更好的提示):

MSBUILD:错误MSB1009:项目文件不存在。

这是我更复杂的声明使用正斜杠:

dotnet ef --startup-project ./MainProject.csproj migrations add MyMigration --context MyDbContextPostgreSQL --output-dir Migrations --project ../MyDatabasePostgreSQL/MyDatabasePostgreSQL.csproj
Run Code Online (Sandbox Code Playgroud)


小智 5

你必须指向你的网络项目

 dotnet ef --startup-project ../TooSeeWeb migrations add MigrationName -c NameOfYourDBContext
Run Code Online (Sandbox Code Playgroud)

有关多项目的更多详细信息,您可以找到https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/projects