【问题标题】:.Net core scaffold dbcontext fails with Could not load type 'System.IO.File'.Net 核心脚手架 dbcontext 失败,无法加载类型“System.IO.File”
【发布时间】:2017-06-27 21:41:56
【问题描述】:

我在 .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(String assemblyPath, IntPtr loadedPeAddress, Int32 loadedPeSize, Int32& age, Guid& guid, UInt32& stamp)
在 System.Diagnostics.StackTraceSymbols.GetReader(字符串 assemblyPath,IntPtr loadedPeAddress,Int32 loadedPeSize,IntPtr inMemoryPdbAddress,Int32 inMemoryPdbSize)
在 System.Diagnostics.StackTraceSymbols.GetSourceLineInfo(字符串 assemblyPath,IntPtr loadedPeAddress,Int32 loadedPeSize,IntPtr inMemoryPdbAddress,Int32 inMemoryPdbSize,Int32 methodToken,Int32 ilOffset,String& sourceFile,Int32& sourceLine,Int32& sourceColumn)
在 System.Diagnostics.StackFrameHelper.InitializeSourceInfo(Int32 iSkip,布尔 fNeedFileInfo,异常异常)
在 System.Diagnostics.StackTrace.CaptureStackTrace(Int32 iSkip,布尔 fNeedFileInfo,线程 targetThread,异常 e)
在 System.Environment.GetStackTrace(异常 e,布尔需要文件信息)
在 System.Exception.GetStackTrace(布尔需要文件信息)
在 System.Exception.ToString(Boolean needFileLineInfo, Boolean 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”,但我需要 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>

【问题讨论】:

    标签: c# macos entity-framework asp.net-core


    【解决方案1】:

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

    【讨论】:

    • 我正在尝试让 net461 ef6 项目在 .net Core 2 上运行。我在这里(在底部)问了这个问题:github.com/aspnet/EntityFramework6/issues/271。不应该可以通过 netstandard 兼容性 shim 在 net Core 下运行 ef6 吗?
    • 如何为现有库创建 shim 映射?
    猜你喜欢
    • 2017-08-29
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 2017-07-22
    • 2022-09-28
    • 1970-01-01
    • 2018-03-03
    相关资源
    最近更新 更多