【问题标题】:Entity Framework Core not compatible DotNet Core class libraryEntity Framework Core 不兼容 DotNet Core 类库
【发布时间】:2019-02-25 15:22:11
【问题描述】:

诚然,对于 DotNet 核心生态系统来说仍然很新。

我为要移植到 DotNet 核心的框架设置了一个包含多个类库的解决方案。

我让他们针对 Core 2.1 (netcoreapp2.1)。

我通过 NuGet 安装了 Microsoft.EntityFrameworkCore 包 (v2.2)。

在本地,一切都可以正常构建和运行。

构建定义 (Azure DevOps) 失败,因为 NuGet 不会提取 EntityFrameworkCore 包。具体来说:

Package Microsoft.EntityFrameworkCore 2.2.2 is not compatible with netcoreapp2.1 (.NETCoreApp,Version=v2.1). Package Microsoft.EntityFrameworkCore 2.2.2 supports: netstandard2.0 (.NETStandard,Version=v2.0) One or more packages are incompatible with .NETCoreApp,Version=v2.1. 

答案似乎很明显 - 但我对此感到困惑。 DotNet 核心支持 NET Standard 2.0。

另外 - 我在本地根本没有遇到这个问题。

让它更加混乱 - 如果我忽略 NuGet 错误,构建实际上会成功。

除了 netcoreapp2.1 之外,我还需要做些什么来确保项目明确声明它们的目标是 netstandard2.0?

这是有问题的项目文件之一。

<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
  <TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>

<ItemGroup>
  <PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.2.2" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\ACME.Framework.Common\ACME.Framework.Common.csproj" />
  <ProjectReference Include="..\ACME.Framework.Entity\ACME.Framework.Entity.csproj" />
</ItemGroup>

</Project>

更新 -

我升级到 DotNet Core 2.2。仍然遇到这个问题。

【问题讨论】:

  • 您可以发布您的纯化 .csproj 吗?
  • 发布了其中一个文件。
  • 您是否运行过 dotnet restore/NuGet 恢复?我知道它在文档中说您不需要,但我以前必须这样做。我们的 Azure DevOps 在构建之前运行任务。请问您为什么没有升级到.NET Core 2.2?我们目前正在完成的任务很好。
  • 我在构建定义中有一个 nuget restore 任务。那就是发生错误的地方。当它为其中一个项目提取 EF 包时 - 我收到兼容性错误。至于升级 - 我刚刚开始执行此任务(移植)。我会尝试一下,看看我们是否会得到不同的结果。
  • 如果很明显,为什么不尝试将 Microsoft.EntityFrameworkCore 降级到较低版本?

标签: .net-core msbuild azure-devops


【解决方案1】:

想通了。

我的构建定义有 3 个任务(NuGet 恢复、DotNet 构建、MS 测试)。

NuGet 还原失败。我能够通过下载与今天 Azure Dev Ops 使用的相同 CLI 版本的 NuGet (v4.1.0) 来复制它。

运行 NuGet 恢复 - 我得到同样的错误。

将任务更改为 dotnet restore 可消除此问题。

我想了解 dotnet restore 在幕后所做的工作与 NuGet 所做的不同。

【讨论】:

  • 啊,那个老栗子。是的,我们不得不在 dotnet 和 nuget 任务之间交替。为了创建 NuGet 包,我们必须使用 dotnet pack 并将其发布到我们的 vsix 服务器,我们必须使用 NuGet 任务。
  • dotnet restore 和 nuget restore 之间的区别绝对是这里关于堆栈溢出的另一个问题的主题。
  • 很高兴你明白了。
  • @Tubs 很高兴知道。我只是让部署管道站起来,所以很高兴你告诉我我需要提前在工具之间切换。可能会节省我几个小时的头痛。
  • 没问题。这当然是一个有趣的,但组合确实有效。我们有内部的 NuGet 和 VSIX 服务器,所以我们不得不使用彩虹的所有组合......
猜你喜欢
  • 2017-04-04
  • 1970-01-01
  • 2017-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-11
  • 1970-01-01
  • 2019-02-12
相关资源
最近更新 更多