我的.NET核心库需要从注册表中读取一些信息(如果可用)或保留默认值(如果不可用).我想了解这样做的最佳实践.
我想我可以在try / catch中包装注册表初始化/使用块,或者我可以检查当前平台是否是Windows,但我不认为这些是最佳实践(最好避免异常并且不能保证任何Windows-基于平台的将有注册表等).
现在,我将依靠
bool hasRegistry = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
但想知道是否有更可靠/通用的解决方案.
最佳答案 使用RuntimeInformation.IsOSPlatform(OSPlatform.Windows)检查注册表就足够了.
如果某种Windows没有注册表(正如你在评论中提到的那样),它很可能会有新的OSPlatform属性……
您可以使用Microsoft的Windows Compatibility Pack来读取注册表.检查他们的例子……
private static string GetLoggingPath()
{
// Verify the code is running on Windows.
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
using (var key = Registry.CurrentUser.OpenSubKey(@"Software\Fabrikam\AssetManagement"))
{
if (key?.GetValue("LoggingDirectoryPath") is string configuredPath)
return configuredPath;
}
}
// This is either not running on Windows or no logging path was configured,
// so just use the path for non-roaming user-specific data files.
var appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
return Path.Combine(appDataPath, "Fabrikam", "AssetManagement", "Logging");
}