首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在asp.net内核中获取项目的根目录。Directory.GetCurrentDirectory()似乎在mac上不能正常工作。

如何在asp.net内核中获取项目的根目录。Directory.GetCurrentDirectory()似乎在mac上不能正常工作。
EN

Stack Overflow用户
提问于 2017-05-01 02:09:08
回答 9查看 197.5K关注 0票数 105

我的项目有一个文件夹结构:

  • Project/data

  • Project/Engine

  • Project/Server

  • project/front-end

  • 项目

在服务器(在Project/Server文件夹中运行)中,我指的是这样的文件夹:

代码语言:javascript
复制
var rootFolder = Directory.GetCurrentDirectory();
rootFolder = rootFolder.Substring(0,
            rootFolder.IndexOf(@"\Project\", StringComparison.Ordinal) + @"\Project\".Length);
PathToData = Path.GetFullPath(Path.Combine(rootFolder, "Data"));

var Parser = Parser();
var d = new FileStream(Path.Combine(PathToData, $"{dataFileName}.txt"), FileMode.Open);
var fs = new StreamReader(d, Encoding.UTF8);

在我的windows机器上,这段代码运行得很好,因为Directory.GetCurrentDirectory()引用了当前文件夹,并且正在做

代码语言:javascript
复制
rootFolder.Substring(0, rootFolder.IndexOf(@"\Project\", StringComparison.Ordinal) + @"\Project\".Length); 

获取项目的根文件夹(而不是bin或debug文件夹)。但是当我在mac上运行它时,它得到了"Directory.GetCurrentDirectory()“,把我送到了/usr//其他地方。它没有引用我的项目所在的文件夹。

在我的项目中查找相对路径的正确方法是什么?我应该将数据文件夹存储在哪里,以便于解决方案中的所有子项目-特别是kestrel服务器项目-访问它?我不希望将其存储在wwwroot文件夹中,因为数据文件夹是由团队中的另一个成员维护的,而我只想访问最新版本。我有什么选择?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2018-07-12 04:05:19

根据您在kestrel管道中的位置-如果您可以访问IConfiguration (Startup.cs构造函数)或IWebHostEnvironment (以前的IHostingEnvironment),您可以将IWebHostEnvironment注入到您的构造函数中,或者直接从配置中请求密钥。

Startup.cs构造函数中注入IWebHostEnvironment

代码语言:javascript
复制
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
     var contentRoot = env.ContentRootPath;
}

Using IConfiguration in Startup.cs Constructor

代码语言:javascript
复制
public Startup(IConfiguration configuration)
{
     var contentRoot = configuration.GetValue<string>(WebHostDefaults.ContentRootKey);
}
票数 95
EN

Stack Overflow用户

发布于 2018-12-06 04:09:42

目前在.Net Core2.2和3.0上工作。

要在控制器中获取项目根目录:

  • 为主机环境创建属性

控制器的私有只读IHostingEnvironment _hostingEnvironment;

  • Add Microsoft.AspNetCore.Hosting

在构造函数中使用Microsoft.AspNetCore.Hosting;

  • Register服务

public HomeController(IHostingEnvironment hostingEnvironment) { _hostingEnvironment = hostingEnvironment;}

  • Now,以获取项目的根路径

string projectRootPath =string

要获取"wwwroot“路径,请使用

代码语言:javascript
复制
_hostingEnvironment.WebRootPath
票数 75
EN

Stack Overflow用户

发布于 2018-08-21 22:31:16

在某些情况下,_hostingEnvironment.ContentRootPathSystem.IO.Directory.GetCurrentDirectory()指向源目录。这里是关于它的bug

那里提出的解决方案对我很有帮助

代码语言:javascript
复制
Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43709657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档