如何使用.CurrentDirectory()在ASP.NET中获得项目的根目录,而不是IIS Express的位置?

时间:2019-05-24 07:44:19

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

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

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

相反,我想获取我的ASP.NET项目的根目录,该目录包含我的controllers文件夹,appsettings.json,bin和obj文件夹。

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

2 个答案:

答案 0 :(得分:0)

如果您无权使用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

答案 1 :(得分:0)

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

  • 由于需要考虑用户数据的存在,因此部署变得更加复杂。如果您需要在部署期间删除预先存在的代码,则尤其如此。
  • 如果用户数据敏感,则开发人员可能无法访问以读取已部署的代码。这会使疑难解答的难度大大增加。
  • 已部署代码的备份将包含用户数据,这意味着即使没有发生任何更改(代码方面),它们也将始终是不同的。

当然,所有这些都假设生产环境的配置与开发人员的本地计算机不同。