为什么 Directory.Exists( "%HOMEPATH%" ) == 在 .Net Core 控制台上为 true,而不是 Windows 桌面控制台?



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

项目调试启动选项命令行参数值:"%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放入项目属性/调试/工作目录中,情况类似。在.Net Core项目上很好,但在Windows桌面控制台上,它显示对话框"工作目录不存在"。

非常感谢您的帮助。

Method Directory.存在于标准 .Net Framework 中,需要目录的绝对或相对路径,像 '%HOMEPATH%' 这样的盟友不起作用。在这种情况下,此方法尝试查找名为"%HOMEPATH%"的文件夹。此行为在 .Net Core 中可能有所不同。

要使其工作,您需要使用类似的东西:

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

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

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

相关内容

最新更新