У меня есть библиотека .NET Standard, которая используется несколькими веб-приложениями в нашей организации. Поскольку все они используют одну и ту же схему для аутентификации, код был помещен в разделяемую библиотеку. Все веб-приложения нацелены на netcoreapp2.2
, а библиотека нацелена на netstandard2.0
. Я обновил первое веб-приложение до netcoreapp3.0
, и после этого оно не запустилось при запуске с этой ошибкой:
System.MissingFieldException: поле не найдено: 'Microsoft.AspNetCore.Server.IISIntegration.IISDefaults.AuthenticationScheme '.
Который был сгенерирован из этой строки в методе расширения библиотеки:
services.AddAuthentication(IISDefaults.AuthenticationScheme);
Для этого .csproj
файлбиблиотека изначально выглядела до обновления:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.0</TargetFrameworks>
<RootNamespace></RootNamespace>
<AssemblyName></AssemblyName>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="2.2.1" />
<PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="2.2.0" />
<PackageReference Include="Microsoft.Graph" Version="1.17.0" />
<PackageReference Include="Microsoft.Identity.Client" Version="4.4.0" />
</ItemGroup>
</Project>
И это работало для наших приложений ASP.NET Core 2.2. После некоторых изменений я запустил приложение ASP.NET Core 3.0 после изменения библиотеки на следующую:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netcoreapp3.0;netstandard2.0</TargetFrameworks>
<RootNamespace></RootNamespace>
<AssemblyName></AssemblyName>
</PropertyGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp3.0'">
<FrameworkReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="3.0.0" />
<PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="3.0.0" />
<PackageReference Include="Microsoft.Graph" Version="1.17.0" />
<PackageReference Include="Microsoft.Identity.Client" Version="4.4.0" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
<PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="2.2.1" />
<PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="2.2.0" />
<PackageReference Include="Microsoft.Graph" Version="1.17.0" />
<PackageReference Include="Microsoft.Identity.Client" Version="4.4.0" />
</ItemGroup>
</Project>
Это предпочтительный / правильный способ сделать это, или есть что-то более простое? Должна ли библиотека использовать Microsoft.NET.Sdk.Web
SDK вместо?