【问题标题】:Running dotnet ef migrations for class library gives error MSB4006为类库运行 dotnet ef 迁移会出现错误 MSB4006
【发布时间】:2017-04-25 20:52:08
【问题描述】:

我有一个面向 .NET Framework 4.6.2 的 ASP.NET Core Web 应用程序 (.NET Framework) 项目。

我已经在web项目中引入了Entity Framework,并且已经设置并运行了

dotnet ef migrations add Initial

来自网络项目目录。迁移已创建,一切正常。

我想重构代码,以便我的实体和数据库上下文位于类库中。所以我创建了一个单独的类库 (.NET Framework) 项目,同样针对 .NET Framework 4.6.2。

仍然从我运行的 web 项目目录中

dotnet ef migrations add Initial --startup-project . --project ..\MigrationTest.Entities

MigrationTest.Entities 是我的类库。

这次我明白了:

C:\Projects\Experiments\MigrationTestNoIdentity\MigrationTest.Entities\obj\MigrationTest.Entities.csproj.EntityFrameworkCore.targets(4,5): 错误MSB4006:目标依赖中存在循环依赖 涉及目标“GetEFProjectMetadata”的图。 [C:\Projects\Experiments\MigrationTestNoIdentity\MigrationTest.Entities\MigrationTest.Entities.csproj] 无法检索项目元数据。确保它是基于 MSBuild 的 .NET Core 项目。如果您使用自定义 BaseIntermediateOutputPath 或 MSBuildProjectExtensionsPath 值,请使用 --msbuildprojectextensionspath 选项。

它不是 .NET Core 项目,所以我尝试创建一个 .NET Core 项目。运行迁移命令然后给出:

C:\程序 文件\dotnet\sdk\1.0.3\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.Sdk.Common.targets(73,5): 错误:项目 'C:\Projects\Experiments\MigrationTestNoIdentity\MigrationTest.Entities.Core\MigrationTest.Entities.Core.csproj' 针对“.NETCoreApp,Version=v1.1”。它不能被 以“.NETFramework,Version=v4.6.2”为目标的项目。 [C:\Projects\Experiments\MigrationTestNoIdentity\MigrationTest.Entities.Core\MigrationTest.Entities.Core.csproj] C:\程序 文件\dotnet\sdk\1.0.3\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.Sdk.targets(92,5): 错误:找不到项目信息 'C:\Projects\Experiments\MigrationTestNoIdentity\MigrationTest.Entities.Core\MigrationTest.Entities.Core.csproj'。 这可能表明缺少项目参考。 [C:\Projects\Experiments\MigrationTestNoIdentity\MigrationTest.Web\MigrationTest.Web.csproj]

当然,.NET 项目不能引用 Core 项目。

我正在尝试做的事情是受支持的场景吗?我的命令行使用有问题吗?还有什么?

【问题讨论】:

  • 如果核心 Web 项目引用了核心类库,那么一切都很好。也许这是对 .net 类库的限制。
  • 在 .NET Framework Web 应用引用 .NET Standard 类库时也很成功。
  • 我猜 dotnet ef 工具不支持针对 .NET Framework 类库,即使引用项目是 ASP.NET Core (.NET Framework) 项目,尽管迁移适用于 Web 项目本身。这可能是合理的,并且超出了 .NET Core 工具的范围,尽管更有用的消息会更好。
  • 我也有同样的问题。你能找到任何解决方案吗?
  • @rout0802 见上面的评论。

标签: entity-framework-core


【解决方案1】:

值得检查以确保您已安装 EF 工具包。

在 Visual Studio 中打开包管理器控制台并执行:

Install-Package Microsoft.EntityFrameworkCore.Tools

然后再试试你的dotnet ef <commands>

【讨论】:

    【解决方案2】:

    超级愚蠢,但我不得不使用正斜杠,因为我在 Mac 上。

    所以在 OP 的例子中:

    dotnet ef migrations add Initial --startup-project . --project ../MigrationTest.Entities

    我是从包含DatabaseContext的项目中运行命令,那么命令如下:

    dotnet ef migrations add Initial --startup-project "../MyProject.Api"

    【讨论】:

      【解决方案3】:

      我正在运行以下命令,它对我有用 -

      项目驱动位置是-D:\MyProjects\SourceCodeAPI\

      初始迁移

      dotnet ef --startup-project D:\MyProjects\SourceCodeAPI\ migrations add initial
      

      创建数据库

      PM> dotnet-ef --startup-project D:\MyProjects\SourceCodeAPI\  database update 
      

      【讨论】:

        【解决方案4】:

        对于可能遇到此问题的任何人,请参阅@fractor 在原始问题下的回复。对我来说,问题是由 .NET Core Web 应用程序引用 .NET Framework 类库引起的。这是一个非常不直观的错误,但是一旦您正确地创建了面向 .NET Core 的类库,这个问题就会消失。

        【讨论】:

          【解决方案5】:
          1. 如果您的目标是预期项目,请在“默认项目”窗口中选择
          2. 检查当前目录
          3. 在我的情况下,它不是我的项目所在的预期目录,所以我必须手动导航到它。这解决了我的问题。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-12-17
            • 2016-09-21
            • 2023-01-30
            • 2021-05-07
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多