【问题标题】:SecurityIdentifier not supported on .Net Core Linux?.Net Core Linux 不支持 SecurityIdentifier?
【发布时间】:2019-11-15 00:45:13
【问题描述】:

我正在将项目从 .Net Framework 移植到 .Net Standard。它广泛使用SecurityIdentifier 类来表示身份和验证标识符。我已经获得了要编译的代码,它在 Windows 上运行良好,但是当我在 Linux 上运行 .Net Core 时,SecurityIdentifier(String) 构造函数会抛出 PlatformNotSupportedException。我检查了the source,果然它使用导入的本机函数进行解析。这不是一个交易破坏者,因为我看到 SecurityIdentifier(byte[], int) 构造函数不依赖于平台功能,并且解析 sid 并不太难。但是当我在 Linux 上运行它时,我很惊讶地看到构造函数抛出相同的 PlatformNotSupportedException!

有人在 Linux 上成功使用过这个类吗?您使用的是哪个版本的 .Net Core?为什么链接中的源代码与我看到的不匹配?

【问题讨论】:

    标签: c# linux .net-core


    【解决方案1】:

    Microsoft announced the Windows Compatibility Pack for .NET Core 时,很明显与System.DirectoryServices 相关的任何内容都仅限于Windows。如果您从未订阅过此类新闻频道,那么现在就应该订阅。

    还有.NET API Analyzer提前告知此类情况。

    【讨论】:

    • 你知道平台依赖在源代码中是如何体现的吗?在我看来,第二个构造函数应该可以工作。
    • 如果在你看来是这样,而不是对 Microsoft,欢迎你向 Microsoft 发送拉取请求。
    • 我还没有提议改变——我不是指规范意义上的“应该”,我的意思是描述我的期望/结论。在上面链接的 .Net Core 的参考源中,我看不到异常是在哪里或如何引发的。有些函数显然具有平台依赖性,但这似乎不是其中之一。整个代码路径是纯 C#,它似乎不需要或使用特定的平台。
    • @bmm6o 链接的文件已经适用于 .NET 5,与您遇到的异常无关。请前往 GitHub 并查看与您使用的运行时匹配的实际源代码。
    • 好吧,我不确定 - 我没有在任何地方看到明确说明的版本。我今天早些时候确实查看了 git 历史记录,该功能的代码自创建以来基本上没有变化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    相关资源
    最近更新 更多