OSX上LocalAppData环境变量的替代方案

时间:2017-07-22 14:09:32

标签: macos .net-core

我刚刚编写了我的第一个.Net Core应用程序,并且在OSX上遇到了一个问题。

我开始在PC上写这个,我只是在OSX上运行一些单元测试。

这一行:

var localAppData = Environment.GetEnvironmentVariable("LocalAppData");

在PC上返回预期值但在OSX上返回null。制作这种跨平台最简单的方法是什么?

在运行时等应用程序在PKG中分发时是否还有其他注意事项?

我在这个谈论中发现的很多答案都是关于在launchd.conf中添加内容,这对我的开发环境来说是好的,但是当它在用户机器上运行时呢?

我正在尝试的是找到一种方法来检索一些OSX等效的Windows AppData。

用户应用程序可以安全地创建文件并存储在每个OSX系统上预配置的数据的位置。

1 个答案:

答案 0 :(得分:0)

这就是我正在使用的:

string GetLocalAppDataFolder() {
    if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
    {
        return Environment.GetEnvironmentVariable("LOCALAPPDATA");
    }
    if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
    {
        return Environment.GetEnvironmentVariable("XDG_DATA_HOME") ?? Path.Combine(Environment.GetEnvironmentVariable("HOME"),".local","share");
    } 
    if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
    {
        return Path.Combine(Environment.GetEnvironmentVariable("HOME"), "Library", "Application Support");
    }
    throw new NotImplementedException("Unknown OS Platform");
}

逻辑如下:

  • 在Windows上,它返回LOCALAPPDATA环境变量(通常类似于C:\Users\{username}\AppData\Local)。
  • 在Linux上,它返回XDG_DATA_HOME环境变量,或者如果不可用,则返回HOME附加/.local/share的变量(根据FreeDesktop Base Directory Specification
  • 在MacOS上,它返回HOME变量,并附加路径/Library/Application Support(因此默认情况下,您将以/Users/{username}/Library/Application Support结尾