我们正在调用在WindowsIdentity上调用GetCurrent的dotnet标准dll。在dotnet核心应用程序中它可以正常工作,但是一旦将其导入dotnet框架(4.7.2)应用程序中,就会出现以下错误:
System.PlatformNotSupportedException: 'Windows Principal functionality is not supported on this platform.'
尽管几个月前在dotnet / standard github issue论坛上提出了这个问题,但这个问题仍然存在: https://github.com/dotnet/standard/issues/1279
答案 0 :(得分:2)
听起来很像,这是程序集解析在构建时与运行时(通过“诱饵和切换”方法起作用)之间工作方式的问题。当您遇到带有传递依赖的此类问题时,首先要尝试的是通过声明它可能有不同的需求,让您的图书馆加入诱饵和转换方在不同的TFM上。幸运的是,这很容易。通常只是意味着改变:
<TargetFramework>netstandard2.0</TargetFramework>
到
<TargetFrameworks>netstandard2.0;net472</TargetFrameworks>
这是一个多目标软件包。构建 application (exe等)(不是库-仅是应用程序)时,它会检查整个依赖关系树并找出每个软件包最合适的dll版本是 。这意味着,如果应用程序以net472
,net48
等为目标-他们将获得您的net472
构建,该构建本身可能会有细微的差异(即使您看不到他们)。如果应用程序以.NET Core为目标,则他们将获得软件包的netstandard2.0
版本,以及 具有的任何依赖项。
注意:为了获得最佳覆盖范围,您可能希望将TFM放到以下位置:
<TargetFrameworks>netstandard2.0;net461</TargetFrameworks>
这样做的原因是net461
,net462
等声明能够处理netstandard2.0
-因此,如果应用程序的目标是{{1} },而您的软件包以net461
为目标,则“最佳”匹配是netstandard2.0;net472
,据推测该匹配仍然无效。当然,您可以根据需要设置任意数量(甚至更改每个对象的向前引用)-也许:
netstandard2.0
通常,您只需将TFM添加到以下任意一个: