gpt4 book ai didi

.net - System.PlatformNotSupportedException : 'Windows Principal functionality is not supported on this platform.'

转载 作者:行者123 更新时间:2023-12-04 12:38:49 25 4
gpt4 key购买 nike

我们正在调用一个在 WindowsIdentity 上调用 GetCurrent 的 dotnet 标准 dll。它在 dotnet 核心应用程序中运行良好,但是一旦将其导入 dotnet 框架 (4.7.2) 应用程序,就会出现以下错误:

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

尽管几个月前在 dotnet/standard github 问题论坛上提出了这个问题,但这个问题仍然存在:
https://github.com/dotnet/standard/issues/1279

最佳答案

这听起来像是装配解析在构建时与运行时(通过“诱饵和切换”方法起作用)之间的工作方式的问题。当您遇到此类传递依赖问题时,首先要尝试让您的库加入诱饵和切换方,声明它可能对不同的 TFM 有不同的需求。幸运的是,这很容易;它通常只是意味着改变:

<TargetFramework>netstandard2.0</TargetFramework>



<TargetFrameworks>netstandard2.0;net472</TargetFrameworks>

现在这是一个多目标包。当构建应用程序(exe 等)(不是库 - 仅应用程序)时,它会检查整个依赖关系树并分别找出最适合每个包的 dll 版本。这意味着如果应用程序的目标是 net472 , net48等 - 他们会收到您的 net472构建,它本身可能具有细微不同的前向链(即使您看不到它们)。如果应用程序面向 .NET Core,他们将获得 netstandard2.0包的版本,以及任何依赖项。

注意:为了获得最佳覆盖率,您可能希望将 TFM 降低一点:

<TargetFrameworks>netstandard2.0;net461</TargetFrameworks>

这样做的原因是 net461 , net462等声称能够处理 netstandard2.0 - 所以如果应用程序的目标是 net461和您的包裹目标 netstandard2.0;net472 ,那么“最佳”匹配是 netstandard2.0 ,这大概仍然行不通。当然,您可以根据需要拥有任意数量(甚至更改每个的后续引用)-也许:

<TargetFrameworks>netstandard2.0;netcoreapp3.0;net461;net472</TargetFrameworks>

通常您只将 TFM 添加到:
  • 利用特定 TFM 上可用的额外功能,或
  • 访问当前列表中未涵盖的平台,或
  • 修复诱饵和切换/依赖问题
  • 关于.net - System.PlatformNotSupportedException : 'Windows Principal functionality is not supported on this platform.' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58391542/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com