2017-09-06 82 views
2

我需要我的蛋糕脚本中的用户目录路径(绝对),以将构建代理的nuget缓存挂载到构建应用程序的docker容器。我如何得到它们?如何在蛋糕版本中获取用户目录

Directory("~") 

不起作用。

+0

这是否给错误?或者不给路径?此外,这工作'var curDir = MakeAbsolute(目录(“〜”));' –

+0

没有错误。 '信息(目录(“〜”));'和'信息(MakeAbsolute(目录(“〜”)));'返回两个'〜'值,而不是'c:\ Users \ current_user?'。 – WebDucer

回答

2

通常,在Windows和* nix上,用户主文件夹都存储在环境变量中。在这种情况下,你应该能够做这样的事情:

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

假设上面包含你想要什么,然后你可以在结果传递给Directory()

UPDATE:

尝试以下操作:

Task("Default") 
    .Does(() => 
{ 
    if(IsRunningOnWindows()) { 
     Information("{0}{1}", EnvironmentVariable("HOMEDRIVE"), EnvironmentVariable("HOMEPATH")); 
    } else { 
     Information(EnvironmentVariable("HOME")); 
    } 
}); 
+0

在Windows上,返回'/ Users/current_user'作为值。 'MakeAbsolute(目录(pathFromEnv))'返回相同的。 Windows上的Docker需要'c:\ Users \ current_user'的正确语法。 – WebDucer

+0

所以要确认,你是在Windows上还是在* nix上运行? –

+0

我想在两者上运行(我们有macOS和Windows构建代理),所以我需要用户主目录的绝对路径。 Docker镜像是基于Linux内核的.Net Core构建系统。所以我需要传递源代码,nuget缓存和nuget config(私人提要)。最后两个默认存储在构建代理的用户目录中(在Windows和Unix上)。 – WebDucer