.NET 6 - Этот сайт вызова доступен на всех платформах. "IdentityNotMappedException" поддерживается только в 'windows'

Совершенно не понятно, по какой причине появляется этот ворнинг (как в заголовке, дословно) и что он значит. Сама формулировка, как мне кажется, содержит в себе противоречие. Дока говорит, что класс доступен на всех платформах. Кто может прояснить?

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

UPD
Нашёл доку по этому правилу - CA1416: Validate platform compatibility, но всё равно не особо понятно.


Ответы (1 шт):

Автор решения: Exploding Kitten

Предупреждение достаточно однозначно - этот код доступен только на Windows. С выходом .NET 6, они начали помечать часть кода специальными атрибутами (или указывать в настройках проекта), что этот код доступен только на определенной платформе. Я чаще такие пометки встречал для Blazor.

Увидеть это можно посмотрев в исходный код .NET: https://github.com/dotnet/runtime/tree/main/src/libraries/System.Security.Principal.Windows.

Directory.Build.props

<Project>
  <Import Project="..\Directory.Build.props" />
  <PropertyGroup>
    <StrongNameKeyId>Microsoft</StrongNameKeyId>
    <SupportedOSPlatforms>windows</SupportedOSPlatforms>
  </PropertyGroup>
</Project>

что собственно и указывает на Windows. И если вы запустите такой код не на Windows, то получите исключение:

Unhandled exception. System.PlatformNotSupportedException: Windows Principal functionality is not supported on this platform.

Т.к. .NET 6 кросплатформенный и даже если вы это собираете и запускаете на Windows это не означает, что этот же код будет/должен работать на других платформах.

Поэтому если вы предполагаете, что ваш код будет работать только на Windows, то вы можете указать это в настройках проекта и предупреждения исчезнут:

<TargetFramework>net6.0-windows</TargetFramework>
→ Ссылка