我的项目有一个文件夹结构:
的
在服务器(在Project/Server文件夹中运行)中,我指的是这样的文件夹:
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()
引用了当前文件夹,并且正在做
rootFolder.Substring(0, rootFolder.IndexOf(@"\Project\", StringComparison.Ordinal) + @"\Project\".Length);
获取项目的根文件夹(而不是bin或debug文件夹)。但是当我在mac上运行它时,它得到了"Directory.GetCurrentDirectory()
“,把我送到了/usr//其他地方。它没有引用我的项目所在的文件夹。
在我的项目中查找相对路径的正确方法是什么?我应该将数据文件夹存储在哪里,以便于解决方案中的所有子项目-特别是kestrel服务器项目-访问它?我不希望将其存储在wwwroot文件夹中,因为数据文件夹是由团队中的另一个成员维护的,而我只想访问最新版本。我有什么选择?
发布于 2018-07-12 04:05:19
根据您在kestrel管道中的位置-如果您可以访问IConfiguration
(Startup.cs
构造函数)或IWebHostEnvironment
(以前的IHostingEnvironment
),您可以将IWebHostEnvironment
注入到您的构造函数中,或者直接从配置中请求密钥。
在Startup.cs
构造函数中注入IWebHostEnvironment
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
var contentRoot = env.ContentRootPath;
}
Using IConfiguration in Startup.cs Constructor
public Startup(IConfiguration configuration)
{
var contentRoot = configuration.GetValue<string>(WebHostDefaults.ContentRootKey);
}
发布于 2018-12-06 04:09:42
目前在.Net Core2.2和3.0上工作。
要在控制器中获取项目根目录:
控制器的私有只读IHostingEnvironment _hostingEnvironment;
在构造函数中使用Microsoft.AspNetCore.Hosting;
public HomeController(IHostingEnvironment hostingEnvironment) { _hostingEnvironment = hostingEnvironment;}
string projectRootPath =string
要获取"wwwroot“路径,请使用
_hostingEnvironment.WebRootPath
发布于 2018-08-21 22:31:16
在某些情况下,_hostingEnvironment.ContentRootPath
和System.IO.Directory.GetCurrentDirectory()
指向源目录。这里是关于它的bug。
那里提出的解决方案对我很有帮助
Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
https://stackoverflow.com/questions/43709657
复制相似问题