Почему Directory.Exists ("% HOMEPATH%") == true с .Net Core Console, но не с Windows Desktop Console? - PullRequest
0 голосов
/ 03 октября 2018

У меня есть два консольных исполняемых файла, каждый из которых использует одну и ту же библиотеку.Один exe-файл написан с использованием .Net Core, а другой - с помощью Windows Desktop Console.В библиотеке, написанной с использованием .Net Standard, у меня есть общий код, включающий метод проверки аргумента командной строки, который может иметь расположение каталога в виде строки.В свойствах проекта на обоих у меня есть Debug 'Start option > Command line argument' "%HOMEPATH%\Documents\'.Когда программа .Net Core использует библиотеку .Net Standard, она находит папку, но когда программа Windows Desktop использует ту же библиотеку, каталог не найден!Почему?

Значения аргументов командной строки параметров запуска отладки проекта: "%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 / рабочий каталог.В проекте .Net Core это нормально, но на консоли рабочего стола Windows он показывает диалоговое окно «Рабочий каталог не существует».

Ваша помощь очень важна.

1 Ответ

0 голосов
/ 03 октября 2018

Метод Directory. Существующий в стандартном .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

...