繁体   English   中英

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

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

我在.Net core 2(预览版1)中创建了一个classlib库。
然后,我为实体框架添加了软件包。
现在我想搭建一个数据库:

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

但我收到此错误:

未处理的异常:System.TypeLoadException:无法从程序集“ System.IO.FileSystem,版本= 4.0.2.0,区域性=中性,PublicKeyToken = b03f5f7f11d50a3a”中加载类型“ System.IO.File”。
在System.Diagnostics.StackTraceSymbols.GetPdbPathFromPeStream(字符串assemblyPath,IntPtr加载PeAddress,Int32加载PeSize,Int32&年龄,Guid&guid,UInt32&戳)
在System.Diagnostics.StackTraceSymbols.GetReader处(字符串assemblyPath,IntPtr加载的PeAddress,Int32加载的PeSize,IntPtr的inMemoryPdbAddress,Int32的MemoryPdbSize)
在System.Diagnostics.StackTraceSymbols.GetSourceLineInfo(字符串assemblyPath,IntPtr已加载PeAddress,Int32已加载PeSize,IntPtr inMemoryPdbAddress,Int32 inMemoryPdbSize,Int32 methodToken,Int32 ilOffset,字符串和sourceFile,Int32&sourceLine,Int32&sourceColumn)
在System.Diagnostics.StackFrameHelper.InitializeSourceInfo(Int32 iSkip,布尔值fNeedFileInfo,异常异常)
在System.Diagnostics.StackTrace.CaptureStackTrace(Int32 iSkip,布尔值fNeedFileInfo,线程targetThread,异常e)
在System.Environment.GetStackTrace(Exception e,布尔NeedFileInfo)
在System.Exception.GetStackTrace(Boolean needFileInfo)
在System.Exception.ToString(Boolean needFileLineInfo,布尔NeedMessage)
在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添加包EntityFramework',但是由于我使用的是.Net核心预览,因此我需要EF Core和预览版本。 这些是正确的命令:

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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM