.Net 核心脚手架 dbcontext 失败,无法加载类型 'System.IO.File'

.Net core scaffold dbcontext fails with Could not load type 'System.IO.File'

我在 .Net core 2(预览版 1)中创建了一个类库。
然后我为 Entity framework.
添加了包 现在我想搭建一个数据库:

dotnet ef dbcontext scaffold "azure connection string" Microsoft.EntityFrameworkCore.SqlServer

但是我收到这个错误:

Unhandled Exception: System.TypeLoadException: Could not load type 'System.IO.File' from assembly 'System.IO.FileSystem, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.
at System.Diagnostics.StackTraceSymbols.GetPdbPathFromPeStream(String assemblyPath, IntPtr loadedPeAddress, Int32 loadedPeSize, Int32& age, Guid& guid, UInt32& stamp)
at System.Diagnostics.StackTraceSymbols.GetReader(String assemblyPath, IntPtr loadedPeAddress, Int32 loadedPeSize, IntPtr inMemoryPdbAddress, Int32 inMemoryPdbSize)
at System.Diagnostics.StackTraceSymbols.GetSourceLineInfo(String assemblyPath, IntPtr loadedPeAddress, Int32 loadedPeSize, IntPtr inMemoryPdbAddress, Int32 inMemoryPdbSize, Int32 methodToken, Int32 ilOffset, String& sourceFile, Int32& sourceLine, Int32& sourceColumn)
at System.Diagnostics.StackFrameHelper.InitializeSourceInfo(Int32 iSkip, Boolean fNeedFileInfo, Exception exception)
at System.Diagnostics.StackTrace.CaptureStackTrace(Int32 iSkip, Boolean fNeedFileInfo, Thread targetThread, Exception e)
at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)
at System.Exception.GetStackTrace(Boolean needFileInfo)
at System.Exception.ToString(Boolean needFileLineInfo, Boolean needMessage)
at Microsoft.EntityFrameworkCore.Tools.Program.Main(String[] args)

这是项目文件:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="EntityFramework" Version="6.1.3" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.2" />
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="1.1.1" PrivateAssets="All" />
  </ItemGroup>
  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0" />
  </ItemGroup>
</Project>

我需要添加额外的包裹吗?这是一个错误吗?

答案:

Alaa Masoud 的回答是正确的,但这里有更多信息。
我做了 'dotnet add package EntityFramework',但我需要 EF Core 和预览版,因为我使用的是 .Net 核心预览版。 这些是正确的命令:

dotnet add package -v 2.0.0-preview2-final Microsoft.EntityFrameworkCore.SqlServer
dotnet add package -v 2.0.0-preview2-final Microsoft.EntityFrameworkCore.Design
dotnet add package -v 2.0.0-preview2-final Microsoft.EntityFrameworkCore.Tools.DotNet

我还将项目类型从 'netstandard2.0' 更改为 'netcoreapp2.0'。脚手架似乎只适用于可运行的项目。
这是我的新项目文件:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.0.0-preview2-final" PrivateAssets="All" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.0.0-preview2-final" />
  </ItemGroup>
  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0-preview2-final" />
  </ItemGroup>
</Project>

您引用的是 EF 6.1 以及 EFCore 1.1.2。从 project.json 中删除 <PackageReference Include="EntityFramework" Version="6.1.3" />,并将 EFCore 的版本更改为 2.0.0-preview2-final,因为您的目标是 .net 标准 2.0。