我有两个控制台可执行文件,每个都使用相同的库。一个 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