专门针对旧版本的单个.NET标准API /命名空间(实体框架核心)

时间:2018-06-01 20:14:45

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

我正在使用我的应用程序将.NET Core升级到2.1。使用最新的SDK(2.1.300),.NET Standard有两个版本的Entity Framework Core。因此,当我右键单击下面的行并单击“转到定义”时,我会在下面的屏幕截图中看到选项。

using Microsoft.EntityFrameworkCore;

Go To Definition

注意实体框架核心的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>

1 个答案:

答案 0 :(得分:2)

你似乎在那里混淆了一些东西:

  • .NET Core SDK主要决定您可以使用的工具。除非你有充分的理由,否则你应该总是运行最新的SDK。因此,您应该使用SDK的当前版本2.1.300。 SDK版本对您将使用的运行时没有直接影响。
  • 如果要在.NET Core上的2.1版上运行ASP.NET Core应用程序,则必须使用netcoreapp2.1目标框架。
  • 显然,您必须使用版本为2.1的Microsoft.AspNetCore.*软件包。
  • 如果要将Entity Framework Core与版本2.0.x一起使用,则需要明确引用它。请注意,在这种情况下,无法使用共享框架引用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共享框架引用,因为这会导致版本冲突。