为什么对.Net Core Console而不是Windows Desktop Console使用Directory.Exists(“%HOMEPATH%”)== true?

时间:2018-10-03 12:17:11

标签: c# .net .net-core .net-standard

我有两个使用相同库的控制台可执行文件。一个exe使用.Net Core编写,另一个使用Windows Desktop Console编写。在使用.Net Standard编写的库中,我具有通用代码,其中包括一种用于验证命令行参数的方法,该方法可能会将目录位置作为字符串。在两者的项目属性中,我都有一个调试'Start option > Command line argument' "%HOMEPATH%\Documents\'。当.Net Core程序使用.Net Standard库时,它将找到该文件夹​​,但是,当Windows Desktop程序使用相同的库时,将找不到该目录!为什么?

Project Debug启动选项命令行参数值: "%HOMEPATH%\Documents"

.Net标准库中的代码:

public static void ValidateWorkingDirectory(ref string workingDirectory)
{
    if (!Directory.Exists(workingDirectory))
    {
        Log.Warning("The working directory argument is not valid! Arg: {0}. Defaulting to current running directory: {1}", workingDirectory, Environment.CurrentDirectory);
        workingDirectory = Environment.CurrentDirectory;
    }
}

有趣的是,如果我将%HOMEPATH%\Documents放入项目属性/ Debug / Working目录中,则类似。在.Net Core项目上正常,但在Windows桌面控制台上,它显示对话框“工作目录不存在”。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

方法目录。标准.Net Framework中存在的目录期望目录的绝对路径或相对路径,例如'%HOMEPATH%'的同盟无效。在这种情况下,此方法尝试查找名为“%HOMEPATH%”的文件夹。在.Net Core中,此行为可能有所不同。

要使其正常工作,您需要使用以下类似内容:

var envVariable = System.Environment.GetEnvironmentVariable("HOMEPATH");
var isExists = System.IO.Directory.Exists(envVariable);

请记住,GetEnvironmentVariable的值不包含'%'。

有关更多信息,请查看以下内容: https://docs.microsoft.com/en-us/previous-versions/windows/desktop/sidebar/system-environment-getenvironmentvariable