Специально предназначаться для более старой версии единого API .NET Standard / пространства имен (Entity Framework Core) - PullRequest
0 голосов
/ 01 июня 2018

Я нахожусь в процессе обновления .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 ядра Entity Framework.Я предполагаю, что по умолчанию я нацеливаюсь на самую высокую доступную версию (2.1.0.0).Я хотел бы специально нацелиться на 2.0.3.0, так как я считаю, что поставщик данных EF моей библиотеки классов в настоящее время имеет несовместимость с 2.1.0.0.Но я хотел бы продолжить использовать последнюю версию SDK.Есть ли способ достичь этого, указав номер версии Microsoft.EntityFrameworkCore для использования?

Я уже работал с руководством по миграции 2.x на 2.1 , если это имеет значение.Вот соответствующие части .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 голосов
/ 02 июня 2018

Вы, похоже, перепутали некоторые вещи:

  • .NET Core SDK в основном определяет инструменты, доступные вам.Если у вас нет веских причин, вы всегда должны запускать последнюю версию SDK.Поэтому вы должны использовать текущую версию 2.1.300 SDK.Версия SDK не имеет прямого влияния на то, какую среду выполнения вы будете использовать.
  • Если вы хотите запустить приложение ASP.NET Core в версии 2.1 в .NET Core, то у вас будетиспользовать целевую платформу netcoreapp2.1.
  • Очевидно, вам придется использовать пакеты Microsoft.AspNetCore.* с версией 2.1.
  • Если вы хотите использовать Entity Framework Core с версией 2.0.x, то вам нужно явно указать на это.Обратите внимание, что не может использовать в этом случае ссылку на общую платформу Microsoft.AspNetCore.App.

Таким образом, проект, который использует ASP.NET Core 2.1 в .NET Core 2.1, использует Entity Framework2.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, а вместо этого в проекте библиотеки, тогда вы нацеливаетесь 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>

Обратите внимание, что Entity Framework Core не включен в стандарт .NET, он просто нацелен на него, что означаетчто он построен на основе стандарта;точно так же, как ваш библиотечный проект.

Если вы хотите использовать свой библиотечный проект из приложения ASP.NET Core 2.1, то вышеупомянутое ограничение будет по-прежнему применяться: вы не можете использовать ссылку на общую платформу Microsoft.AspNetCore.App,так как это вызовет конфликт версий.

...