У меня есть стандартная библиотека .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 'не удалось загрузить в контекст привязки' Load 'домена приложения с идентификатором 1. Причина сбоя: System.IO.FileNotFoundException: Не удалось загрузить файл или сборку Microsoft.Win32.Registry, Version = 4.1.1.0, Culture = нейтральный, PublicKeyToken = b03f5f7f11d50a3a или одну из его зависимостей. Система не может найти указанный файл.'
Я установил пакет nuget для совместимости с Windows в свой стандартный проект .net. Я также попытался установить пакет nuget Microsoft.Win32.Registry.
Ошибка сохраняется.
Если я закомментирую строки
var dropFolder = Microsoft.Win32.Registry.GetValue(keyName: $@"{userRoot}\{subkey}", valueName: "DropFolder", defaultValue: @"C:\somepath");
Console.WriteLine($"Drop folder is {dropFolder}");
Работает нормально.
Я ссылаюсь на стандартную библиотеку .net из библиотеки .net framework, поэтому нет возможности перейти на ядро .net.
Стандартный cs proj .dot net
<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>