不管可执行文件的位置如何,如何使用相对路径访问项目目录中的文件?

时间:2018-10-18 17:45:15

标签: c# .net-core

使用Visual Studio运行项目时,工作目录(AppDomain.CurrentDomain.BaseDirectory)为{ProjectDirectoryPath}\bin\Debug\netcoreapp2.0;但是从发布文件夹中运行项目(发布之后)时,工作目录为{PublishDirectoryPath}。所有项目配置和数据文件都位于同一树结构的{ProjectDirectoryPath}{PublishDirectoryPath}下。意思是,每当我使用Visual Studio运行项目时,都应该在每个文件的路径前加上../../../

我当前的解决方案是在访问项目目录中的文件时使用以下功能:

public static string Root()
{
    string root = AppDomain.CurrentDomain.BaseDirectory;
    if (root.EndsWith("Debug\\netcoreapp2.0\\"))
        root = root + Slash("../../..");
    return root;
}

但是,在我看来,必须有一些更好的方法来解决此问题,因为使用位于项目目录下的文件并不稀奇(尽管更常见的是将配置和数据文件存储在%AppData%或{下{1}})。因此,如此之多的开发人员真的无法对如此普遍的事情实施这样的解决方案似乎并不正确。

我想念什么?

2 个答案:

答案 0 :(得分:0)

通常,您的应用程序所依赖的任何可能更改的常量都会添加到web.config / app.config文件中;这样您就无需重新编译代码即可更改这些值。服务或库可能是例外,它将要求使用者通过参数提供数据。

将路径存储在配置文件中时,可以使用web.config/app.config transforms来基于build configurations更改值。这样,您可以根据部署到的环境为配置文件设置提供不同的值。

答案 1 :(得分:0)

经过数小时的研究,我发布了这个问题。即使发布后,我仍在继续寻找解决方案。我看到了很多有关此问题的线索,还有很多对我而言不起作用的解决方案。现在,我偶然发现了this,并且使用了第二种方法。使用此解决方案可以正常工作。

对我来说,看起来很奇怪,以至于无法获得如此基本的东西。不幸的是,.NET Core还不够成熟。