Как получить каталог пользователя в сборке торта

Мне нужен путь к пользовательскому каталогу (абсолютный) в моем скрипте торта, чтобы смонтировать кеш nuget агента сборки в контейнер докера, который создает приложение. Как мне их получить?

Directory("~")

не работает.


person WebDucer    schedule 06.09.2017    source источник
comment
Это дает ошибку? Или путь не дает? Это тоже работает var curDir = MakeAbsolute(Directory("~"));   -  person Tarun Lalwani    schedule 06.09.2017
comment
Нет. Ошибки нет. Information(Directory("~")); и Information(MakeAbsolute(Directory("~"))); возвращают оба ~ в качестве значения вместо c:\Users\current_user?.   -  person WebDucer    schedule 06.09.2017


Ответы (1)


Как правило, и в Windows, и в *nix домашняя папка пользователя хранится в переменной среды. В этом случае вы сможете сделать что-то вроде этого:

Task("Default")
.Does(() =>
{
    if(IsRunningOnWindows()) {
        Information(EnvironmentVariable("HOMEPATH"));
    } 
    else 
    {
        Information(EnvironmentVariable("HOME"));
    }
});

Предполагая, что приведенное выше содержит то, что вы хотите, вы можете передать результат Directory().

ОБНОВИТЬ:

Попробуйте следующее:

Task("Default")
    .Does(() =>
{
    if(IsRunningOnWindows()) {
        Information("{0}{1}", EnvironmentVariable("HOMEDRIVE"), EnvironmentVariable("HOMEPATH"));
    } else {
        Information(EnvironmentVariable("HOME"));
    }
});
person Gary Ewan Park    schedule 06.09.2017
comment
В Windows вышеуказанное возвращает /Users/current_user в качестве значения. MakeAbsolute(Directory(pathFromEnv)) возвращает то же самое. Docker в Windows нуждается в правильном синтаксисе с c:\Users\current_user. - person WebDucer; 06.09.2017
comment
Итак, чтобы подтвердить, вы работаете в Windows или в * nix? - person Gary Ewan Park; 06.09.2017
comment
Я хочу работать на обоих (у нас есть агенты сборки macOS и Windows), поэтому мне нужен абсолютный путь к домашнему каталогу пользователя. Образ докера основан на Linux с системой сборки .Net Core. Поэтому мне нужно передать тома с исходным кодом, кешем nuget и конфигурацией nuget (частные каналы). Последние два по умолчанию хранятся в пользовательском каталоге агента сборки (в Windows и Unix). - person WebDucer; 06.09.2017
comment
Сборка Cake всегда выполняется на основном хосте? - person Tarun Lalwani; 06.09.2017
comment
Обновленный ответ с тем, что, как я думаю, вам нужно. ПРИМЕЧАНИЕ. Я не проверял, что возвращается с машины *nix, так как у меня ее нет под рукой. - person Gary Ewan Park; 06.09.2017
comment
@GaryEwanPark спасибо. Обходной путь работает (я попробовал аналогичный подход за несколько минут до вашего редактирования). - person WebDucer; 06.09.2017
comment
Нельзя ли просто использовать Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)? - person me--; 20.09.2018
comment
@me - вопрос в том, возвращает ли это полезное значение в каждой операционной системе или нет. С головы до ног, я не уверен. - person Gary Ewan Park; 20.09.2018
comment
@me-- и Гэри: Согласно Developers.redhat.com/blog/2018/11/07/ да - person David Gardiner; 24.02.2019