.NET 6 - Этот сайт вызова доступен на всех платформах. "IdentityNotMappedException" поддерживается только в 'windows'
Совершенно не понятно, по какой причине появляется этот ворнинг (как в заголовке, дословно) и что он значит. Сама формулировка, как мне кажется, содержит в себе противоречие. Дока говорит, что класс доступен на всех платформах. Кто может прояснить?
UPD
Нашёл доку по этому правилу - CA1416: Validate platform compatibility, но всё равно не особо понятно.
Ответы (1 шт):
Предупреждение достаточно однозначно - этот код доступен только на 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>
