我有一个.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>
答案 0 :(得分:1)
要使丢失的二进制文件包含在.NET Framework项目的输出中,还应该在此项目中安装LockScreenImagePath
软件包。或至少安装Microsoft.Win32.Registry软件包。