目前,Microsoft.EntityFrameworkCore.Tools.DotNet V2.0.1显示.NetCoreApp的依赖关系版本= 2.0
为什么不是版本> = 2.0的原因? 任何想法何时支持更新的版本 .NetCore SDK将可用
编辑:添加了屏幕截图
对于类似的软件包,请参阅列为.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依赖项上进行版本控制存在问题。
答案 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核心版本控制方面的理解如下:
.NET Core SDK
版本为2.1.5。这允许构建.NET标准和.NET核心应用程序。Microsoft.EntityFrameworkCore.Tools.DotNet
版本为2.0.1。这引用.netcoreapp2.0 Microsoft.NetCore.App
的平台,它是当前版本2.0.5的运行时。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
是一个工具引用,对包引用的处理方式不同。因此版本控制和目标也有所不同。