从其他目录运行时文件路径不起作用

时间:2019-06-26 02:05:10

标签: c#

在我的项目中,我有2个文件是使用C#脚本加载的,但是从项目根文件夹以外的任何地方运行该项目时,都会得到System.IO.FileNotFoundException

例如,如果我在终端的项目根目录中并且运行dotnet run,则该程序将正常运行,但是如果我使用dotnet run -p (path to .csproj)从项目根目录外部运行,则会得到例外。

这些是用于加载文件的代码段:

_shader = new Shader("shader.vert", "shader.frag");

-

public Shader(string vertPath, string fragPath)
{
    var shaderSource = LoadSource(vertPath);
    ...
}

-

private static string LoadSource(string path)
{
    using (var sr = new StreamReader(path, Encoding.UTF8))
    {
            return sr.ReadToEnd();
    }
}

1 个答案:

答案 0 :(得分:1)

听起来像在current directory中搜索那些文件。

您有两个选择:

  1. 在程序启动时设置当前目录

    Environment.CurrentDirectory = 
    Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
    
  2. 使用绝对路径

    var folder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
    _shader = new Shader(folder + "\shader.vert", folder + "\shader.frag");