是否有一致的方法让 .net 核心 Web 应用和控制台应用确定数据文件文件夹的路径?



我有两个共享数据文件文件夹的应用程序。一个是 asp.net 核心 Web 应用程序。另一个是 .net 核心控制台应用。文件夹结构为:

WebApp
WorkflowApp
Datafiles

如果我在控制台应用程序中使用以下任何一项:

string en = Environment.CurrentDirectory;
string dr = Directory.GetCurrentDirectory();
string ad = AppDomain.CurrentDomain.BaseDirectory;
string sa = System.AppContext.BaseDirectory;

它们都指向:工作流\bin\调试etcoreapp2.0

如果我在web应用程序中使用它们,那么en&dr指向"webapp",其他人指向"webapp\bin\Debugetcoreapp2.0

"。我正在使用appsettings.json来设置数据文件的路径。此文件由 WebApp 和 WorkflowApp 共享。我将其设置为"../数据文件",然后使用以下方法获取完整路径:

Path.Combine(Directory.GetCurrentDirectory(), datafiles);

但这仅适用于 WebApp。我想找到一种适用于两者的通用方法。而且我不想在appsettings.json中设置绝对路径。

我可以使用AppDomain.CurrentDomain.BaseDirectory,然后使用:

@"........Datafiles"

从"bin\Debugetcoreapp2.0"文件夹移回。但这似乎有点令人费解。有没有更好的方法?

编辑:这个问题的答案可能会解决我的问题(至少在开发中(:如何从代码中获取项目文件夹(.csproj 文件所在的位置(的路径?

试试这种方式。

var requiredPath = "";
var address = "DataFiles";
var rootDir = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
if (rootDir != null)
{
requiredPath = Path.Combine(rootDir, address);
}

我不会让应用程序找出数据文件所在的目录/路径,而是将路径外部化为配置,例如在appSettings.json或类似的东西中。

如果您想更进一步并让应用程序共享相同的配置,您可以使用 cetnralized 存储,例如 Consul 或 Etcd

https://github.com/etcd-io/etcd

https://www.consul.io/api/kv.html

相关内容

最新更新