我有两个使用相同库的控制台可执行文件。一个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桌面控制台上,它显示对话框“工作目录不存在”。
非常感谢您的帮助。
答案 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