Как использовать типы ASP.NET Core 3.0 из проекта библиотеки для общих контроллеров, промежуточного ПО и т. д.?

Хотя ASP.NET Core до 2.2 можно использовать через NuGet для создания проектов библиотек для общих контроллеров, промежуточного ПО и т. д., как мне создать библиотеку, которая может использовать типы ASP.NET Core 3.0?

Хотя для проектов, содержащих представления, существует шаблон «Библиотека классов Razor» (razorclasslib), как мне создать библиотеку, содержащую только логические компоненты?


person Martin Ullrich    schedule 02.09.2019    source источник


Ответы (1)


Приложения, созданные для .NET Core 3.0, могут ссылаться на одну или несколько общих платформ. ASP.NET Core является одной из этих общих платформ (другими могут быть базовая общая платформа .NET Core и общая платформа рабочего стола Windows, содержащая WinForms и WPF).

Чтобы сослаться на ASP.NET Core из классической библиотеки .NET Core, предназначенной для .NET Core 3.0 (netcoreapp3.0, а не .NET Standard), вы можете использовать FrameworkReference в csproj для ссылки на платформу:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <FrameworkReference Include="Microsoft.AspNetCore.App" />
  </ItemGroup>

</Project>

При открытии в Visual Studio эта дополнительная ссылка на платформу будет отображаться в узле зависимостей в обозревателе решений:

введите здесь описание изображения

person Martin Ullrich    schedule 02.09.2019
comment
Да, это работает, и что в этом хорошего, так это то, что если вы добавите его и сошлетесь только на одну или две вещи из него, вы можете создать урезанный EXE/пакет, и он выберет только то, что необходимо, в отличие от явных ссылок сборки. Мне нужен был только IWebHostEnvironment, а дополнительная площадь крошечная. Спасибо! - person Rick Strahl; 27.09.2019
comment
а что, если библиотека нацелена на стандарт .net 2.1? - person user2163043; 27.09.2019
comment
Тогда вы не сможете использовать основные API-интерфейсы asp.net и должны перенацелиться на netcoreapp3.0. В .NET Standard можно использовать только пакеты EF Core и Microsoft.Extensions выпусков 3.0. - person Martin Ullrich; 27.09.2019