.net标准,Windows兼容包和注册表

时间:2018-08-10 10:59:44

标签: c# .net .net-standard-2.0

我有一个.net标准2.0库,我想使用它通过Windows兼容性包(如果运行的操作系统是Windows)访问注册表。

if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
     Console.WriteLine("On windows.");
     var dropFolder = Microsoft.Win32.Registry.GetValue(keyName: $@"{userRoot}\{subkey}", valueName: "DropFolder", defaultValue: @"C:\somepath");
     Console.WriteLine($"Drop folder is {dropFolder}");
 }

这崩溃,有异常

  

托管调试助手'BindingFailure':'具有以下内容的程序集   显示名称“ Microsoft.Win32.Registry”无法加载到“加载”中   ID为1的AppDomain的绑定上下文。故障原因   was:System.IO.FileNotFoundException:无法加载文件或程序集   'Microsoft.Win32.Registry,版本= 4.1.1.0,文化=中性,   PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一。的   系统找不到指定的文件。'

我已将Windows兼容性nuget软件包安装到我的.net标准项目中。我还尝试安装Microsoft.Win32.Registry nuget软件包。

错误持续存在。

如果我注释掉这些行

var dropFolder = Microsoft.Win32.Registry.GetValue(keyName: $@"{userRoot}\{subkey}", valueName: "DropFolder", defaultValue: @"C:\somepath");
Console.WriteLine($"Drop folder is {dropFolder}");

它工作正常。

我是从.net框架库引用.net标准库的,所以没有选择转到.net核心的地方。

.dot净标准CS项目

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Windows.Compatibility" Version="2.0.0" />
    <PackageReference Include="MQTTnet" Version="2.8.2" />
    <PackageReference Include="Newtonsoft.Json" Version="11.0.2" />
    <PackageReference Include="RabbitMQ.Client" Version="5.1.0" />
  </ItemGroup>

</Project>

1 个答案:

答案 0 :(得分:1)

要使丢失的二进制文件包含在.NET Framework项目的输出中,还应该在此项目中安装LockScreenImagePath软件包。或至少安装Microsoft.Win32.Registry软件包。