【问题标题】:Cross platform way to get directory for application data in .NET Core 1.1在 .NET Core 1.1 中获取应用程序数据目录的跨平台方式
【发布时间】:2017-03-20 21:26:52
【问题描述】:

此时我正在编写一个应该能够在 Windows 和 Linux (Ubuntu 16.04) 上运行的 ASP.NET Core Web 应用程序。我有一些想要存储的数据,但是太少了,使用数据库会极大地浪费性能。更何况安装过程会是原来的两倍。

这就是我想将此信息保存在文件中的原因。在 .NET Framework 中,我会使用 Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 之类的东西来获取可以存储应用程序文件的目录。 Unfortunately this method is not available in .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>

【问题讨论】:

  • App_Data 文件夹在任何平台上的 .Net Core 中都没有任何意义。
  • 试试this
  • @DavidG 例如,在 Ubuntu 中,应用程序将文件保存在 /var/lib 中是很常见的。我希望有这样的目录。
  • 为什么不使用IHostingEnvironment.ContentRootPath中的一些相对文件夹?
  • /var/lib 是您系统上所有应用程序的全局存储,即使该方法将其作为值返回,它也不会与App_Data 表示相同的内容。我会说你执行#if &lt;platform 指令会更安全。

标签: c# asp.net-core cross-platform .net-core


【解决方案1】:

我通常使用来自IHostingEnvironment.ContentRootPath 的相对文件夹。它提供了一种跨平台的方式来从应用程序的根目录访问文件。如果你愿意,你甚至可以称它为App_Data。

【讨论】:

  • 谢谢!为了得到我的最终路径,我使用了string settingsPath = Path.Combine(_hostingEnvironment.ContentRootPath, "AppData");
  • 如果我想在C:\Program Files下安装一个ASP.NET Core应用程序怎么办?那么ContentRootPath 是否也会在C:\Program Files 之下的某个地方,即在没有特权访问的情况下无法写入日志文件的地方?我希望将我的日志写入 Windows 的 %APPDATA% 下的某个位置,Unix 下的 $HOME/.local/share/ 等。
猜你喜欢
  • 1970-01-01
  • 2012-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 1970-01-01
  • 2019-04-26
  • 1970-01-01
相关资源
最近更新 更多