I have a .net standard 2.0 library that I want to use to access the registry via the windows compatibility pack (if the OS its running on is 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}");
}
This crashes with an exception
Managed Debugging Assistant 'BindingFailure' : 'The assembly with display name 'Microsoft.Win32.Registry' failed to load in the 'Load' binding context of the AppDomain with ID 1. The cause of the failure was: System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Win32.Registry, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.'
I have installed the Windows Compatibility nuget package into my .net standard project. I have also tried installing the Microsoft.Win32.Registry nuget package.
The error perists.
If I comment out the lines
var dropFolder = Microsoft.Win32.Registry.GetValue(keyName: $@"{userRoot}\{subkey}", valueName: "DropFolder", defaultValue: @"C:\somepath");
Console.WriteLine($"Drop folder is {dropFolder}");
It works fine.
I am referencing the .net standard library from a .net framework library so no option to go to .net core.
The .dot net standard cs proj
<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>