.NET Core 1.1中跨平台获取应用程序数据目录的方法

Jor*_*nar 6 c# cross-platform .net-core asp.net-core

目前,我正在编写一个ASP.NET Core Web应用程序,该应用程序应该能够在Windows和Linux(Ubuntu 16.04)上运行。我有一些要存储的数据,但是数量很少,使用数据库会浪费大量的性能。更不用说安装过程的时间将是原来的两倍。

这就是为什么我要将这些信息保存在文件中的原因。在.NET Framework中,我将使用类似于Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)获取目录的目录来存储应用程序文件。不幸的是,此方法在.NET Core 1.1中不可用

有没有办法对文件夹进行写入而无需对其进行硬编码?

以下是我要写入的数据的示例。此列表中的任何时间都只有大约5台设备。

<devices>
    <device>
        <id>0</id>
        <name>xxx</name>
        <physicaladdress>yyyyyyyyy</physicaladdress>
    </device>
    ...
    <device>
        <id>5</id>
        <name>xxx</name>
        <physicaladdress>yyyyyyyyy</physicaladdress>
    </device>
</devices>
Run Code Online (Sandbox Code Playgroud)

Hen*_*ema 3

我通常使用IHostingEnvironment.ContentRootPath. 它提供了一种从应用程序根目录访问文件的跨平台方法。App_Data如果您愿意,您甚至可以调用它。

  • 如果我想在“C:\Program Files”下安装 ASP.NET Core 应用程序怎么办?那么 `ContentRootPath` 是否也不会位于 `C:\Program Files` 下的某个位置,即没有特权访问就无法写入日志文件的位置?我希望我的日志写入 Windows 下的 %APPDATA% 下的某处,Unix 下的 `$HOME/.local/share/` 等。 (6认同)
  • 谢谢!为了获得最终路径,我使用了 `string settingsPath = Path.Combine(_hostingEnvironment.ContentRootPath, "AppData");` (2认同)