我的项目有一个文件夹结构,其内容如下:
在服务器中(在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文件夹中,因为数据文件夹是由团队中的不同成员维护的,而我只想访问最新版本。我有什么选择?
取决于你在kestrel管道中的位置 - 如果你能访问IConfiguration
(Startup.cs
构造函数)或IHostingEnvironment
,你可以将IHostingEnvironment
注入你的构造函数中,或者直接从配置中请求密钥。
Startup.cs
构造函数中注入IHostingEnvironment
。