我正在使用我的应用程序将.NET Core升级到2.1。使用最新的SDK(2.1.300),.NET Standard有两个版本的Entity Framework Core。因此,当我右键单击下面的行并单击“转到定义”时,我会在下面的屏幕截图中看到选项。
using Microsoft.EntityFrameworkCore;
注意实体框架核心的2.1.0.0和2.0.3.0。我假设,默认情况下,我的目标是可用的最高版本(2.1.0.0)。我想专门针对2.0.3.0,因为我相信我的类库的EF数据提供程序currently has an incompatibility与2.1.0.0。但是,我想继续使用最新版本的SDK。有没有办法通过某种方式指定要使用的Microsoft.EntityFrameworkCore
的版本号来实现这一目的?
如果重要的话,我已经完成了2.x to 2.1 migration guide。以下是我的类库.csproj的相关部分供参考:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.3" />
</ItemGroup>
</Project>
答案 0 :(得分:2)
你似乎在那里混淆了一些东西:
2.1.300
。 SDK版本对您将使用的运行时没有直接影响。netcoreapp2.1
目标框架。Microsoft.AspNetCore.*
软件包。Microsoft.AspNetCore.App
。因此,在.NET Core 2.1上使用ASP.NET Core 2.1,使用Entity Framework 2.0和Pomelo MySQL提供程序的项目可能如下所示:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore" Version="2.1.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.0.3" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="2.0.1" />
</ItemGroup>
</Project>
如果您不是在ASP.NET Core Web项目中而是在库项目中尝试这样做,那么您的目标是netstandard2.0
。在这种情况下,您只需要直接导入正确的包:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.0.3" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="2.0.1" />
</ItemGroup>
</Project>
请注意,实体框架核心不包含在.NET标准中,它只是针对它,这意味着它建立在标准之上;就像你的图书馆项目一样。
如果要从ASP.NET Core 2.1应用程序中使用库项目,则上述限制仍然适用:您不能使用Microsoft.AspNetCore.App
共享框架引用,因为这会导致版本冲突。