Microsoft.EntityFrameworkCore.Tools.DotNet v2.0.1

时间:2018-02-05 14:42:08

标签: entity-framework .net-core

目前,Microsoft.EntityFrameworkCore.Tools.DotNet V2.0.1显示.NetCoreApp的依赖关系版本= 2.0

为什么不是版本> = 2.0的原因? 任何想法何时支持更新的版本  .NetCore SDK将可用

编辑:添加了屏幕截图 Nuget in VS 2017
对于类似的软件包,请参阅列为.NetCoreApp = v2.0的依赖关系,而不是.NetStandard = V2.0或> = CoreApp V2.0。

EDIT2:
我运行了以下新项目测试: 我仍然认为这里有一个问题 我安装了.netcore sdk 2.1.4 我在VS2017 15.5.5

中开始使用全新的解决方案

我创建了一个新的核心项目    netcoreapp2.0 和一个新的标准项目  netstandard2.0

这些包

o Microsoft.EntityFrameworkCore.tools v2.0.1
 o Microsoft.EntityFrameworkCore.design v2.0.1
 o Microsoft.EntityFrameworkCore v2.0.1
 o Microsoft.EntityFrameworkCore.Sqlite

都可以在两个项目中成功安装  netstandard2.0 和    netcoreapp2.0

然而: Microsoft.EntityFrameworkCore.Tools.DotNet v2.0.1    无法安装在netstandard2.0项目中,我可以使用它并且错误是有道理的。

  

恢复C的包:_Dev \ PJSTest \ PJSStd \ PJSStd.csproj ...包   Microsoft.EntityFrameworkCore.Tools.DotNet 2.0.1不兼容   使用netstandard2.0(.NETStandard,Version = v2.0)。包   Microsoft.EntityFrameworkCore.Tools.DotNet 2.0.1支持:   netcoreapp2.0(.NETCoreApp,Version = v2.0)包还原失败。   回滚'PJSStd'的包更改。时间流逝:   00:00:00.1634807   ==========完成==========

BUT

Microsoft.EntityFrameworkCore.Tools.DotNet v2.0.1

甚至不能安装在netcoreapp2.0项目中

  

恢复C的包:_Dev \ EFTEST \ EFCore \ EFCore.csproj ...检测到   package downgrade:Microsoft.NETCore.App从2.0.3到2.0.0。   直接从项目引用包来选择不同的   版。 EFCore - > Microsoft.EntityFrameworkCore.Tools.DotNet 2.0.1    - > Microsoft.NETCore.App(> = 2.0.3)EFCore - > Microsoft.NETCore.App(> = 2.0.0)包还原失败。回滚包更改   'EFCore'。经过的时间:00:00:01.1413809   ==========完成==========

我认为在CoreApp依赖项上进行版本控制存在问题。

1 个答案:

答案 0 :(得分:2)

我很高兴能得到纠正,但我的理解是 .NetCoreApp (v2)是平台,而 .NetCore.App (v2.0.5,当前)是 target 该平台的API集合。

因此,Microsoft.EntityFrameworkCore.Tools.DotNet V2.0.1仅指向.NetCoreApp,版本= 2.0这一事实意味着它只能支持来自该平台的api ......它没有说明这些依赖项所支持的平台。例如如果您继续深入了解Microsoft.NetCore.App依赖项,您将看到.NetCoreApp下的列表,版本= 1.0到2.0。

编辑:我对各种.NET核心版本控制方面的理解如下:

  1. .NET Core SDK版本为2.1.5。这允许构建.NET标准和.NET核心应用程序。
  2. Microsoft.EntityFrameworkCore.Tools.DotNet版本为2.0.1。这引用.netcoreapp2.0
  3. .netcoreapp2.0是实现Microsoft.NetCore.App的平台,它是当前版本2.0.5的运行时。
  4. netcoreapp2.0的关键部分是它对.NETStandard.Library(netstandard2.0)的依赖,但netstandard2.0不依赖于netcoreapp2.0。我认为this answer比我能更好地解释它。所以EntityFramework cli工具不适用于使用.netstandard2.0的库,因为它的目标是.netcoreapp2.0。顺便说一句,EFCore确实有效 - 因为它的目标是.netstandard - 只是工具不会。

    总之,您拥有的版本2.1.4的SDK已经包含必要的.NET Core平台和运行时。因此不需要降级到原始版本2。 需要发生的是,必须更新csproj以定位.NET Core运行时,以便使用工具:<TargetFramework>netcoreapp2.0</TargetFramework>

    EDIT2:以下是针对.netstandard的csproj文件示例(以便UWP可以引用它),并且能够使用EFCore工具.DotNet:

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <TargetFramework>netstandard2.0</TargetFramework>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.1" PrivateAssets="All" />
      </ItemGroup>
    
      <ItemGroup>
        <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.1" />
      </ItemGroup>
    
    </Project>
    

    Microsoft.EntityFrameworkCore.Tools是一个针对.NET Standard的包引用。 Microsoft.EntityFrameworkCore.Tools.DotNet是一个工具引用,对包引用的处理方式不同。因此版本控制和目标也有所不同。