【问题标题】:How can I get the root of my project in ASP.NET and not the location of IIS Express using .CurrentDirectory()?如何使用 .CurrentDirectory() 在 ASP.NET 中获取项目的根目录而不是 IIS Express 的位置?
【发布时间】:2019-05-31 05:51:21
【问题描述】:

我有一个正在开发的 ASP.NET Core 项目,我正在使用 LiteDB 作为数据库解决方案。为了实例化我的数据库,我需要提供一个 URI,以便程序知道在哪里创建数据库。

通常我会执行System.Environment.CurrentDirectory() 之类的操作来查找我所在的当前目录并对其进行修改,但是此命令的结果是C:\program files\IIS Express 或类似的东西。基本上,当前目录指向 IIS Express 的位置。

相反,我想获取我的 ASP.NET 项目的根目录,即包含我的控制器文件夹、appsettings.json、bin 和 obj 文件夹的位置。

我需要使用什么命令来获取表示此位置的字符串?出于显而易见的原因,我不想使用硬编码字符串。

【问题讨论】:

标签: asp.net asp.net-core litedb


【解决方案1】:

如果您无法访问 DI,您可以尝试:

Assembly.GetExecutingAssembly().Location

如果您可以访问 DI,请尝试以下操作:

注入IHostingEnvironment并调用environment.ContentRootPath

How to get root directory of project in asp.net core. Directory.GetCurrentDirectory() doesn't seem to work correctly on a mac

【讨论】:

    【解决方案2】:

    使用专用位置(例如网络共享)而不是包含可执行代码的文件夹可能会更好地为您服务。将用户数据混合到已部署的代码中会带来很多麻烦:

    • 部署变得更加复杂,因为它们需要考虑用户数据的存在。如果您需要在部署期间删除预先存在的代码,则尤其如此。
    • 如果用户数据敏感,开发人员可能会被拒绝访问以读取已部署的代码。这会使问题排查变得更加困难。
    • 已部署代码的备份将包含用户数据,这意味着即使没有(代码方面)发生任何变化,它们也总是看起来不同。

    当然,这一切都假设生产环境的配置与开发人员的本地机器不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-04
      • 1970-01-01
      • 1970-01-01
      • 2022-11-22
      • 2016-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多