.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。
我在 .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。