我有以下情况,其中注册表访问不适用于.Net Standard 2.0 dll。该程序分为两部分......
.Net Standard 2.0的共享库。它引用了Microsoft.Win32.Registry nuget包(v4.4)。共享库中包含以下方法:
public static void GetRegistryValue()
{
// it does successfully enter this if statment
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
var y = Microsoft.Win32.Registry.LocalMachine; // this returns null
var x = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Default); // this throws System.PlatformNotSupportedException: 'Registry is not supported on this platform.'
}
}
一个完整的.Net Framework主应用程序。我试过.4.6.1和.4.7.1。主应用程序引用共享库。当主应用程序调用GetRegistryValue()时,它不起作用。
Microsoft.Win32.Registry.LocalMachine返回null,因此无效。
RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine,RegistryView.Default)抛出System.PlatformNotSupportedException。
我在这里做错了什么?
答案 0 :(得分:-1)
这是设计的。不要将此类仅依赖于Windows的依赖项添加到.NET Standard类库中。在编译时,它只会误导MSBuild / NuGet选择一个错误的程序集(返回null
或抛出PlatformNotSupportedException
你看到的内容。
此类引用必须仅存在于.NET Framework项目中,并且关于如何将引用和相关代码库移动到上层,您必须自己考虑和重构。答案太广了。