如何在Azure批处理节点上安装.net Core?

时间:2019-06-28 17:01:15

标签: .net .net-core azure-batch

我正在尝试使用启动任务在azure批处理节点上安装.net core 2.2吗?我尝试在启动任务中使用的命令如下:

@powershell -NoProfile -ExecutionPolicy unrestricted -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; &([scriptblock]::Create((Invoke-WebRequest -useb 'https://dot.net/v1/dotnet-install.ps1'))) -Runtime dotnet -Version 2.2.5"

启动任务失败。此外,如果我在节点上手动运行脚本,则它不是在安装.net core sdk。

有帮助吗?

2 个答案:

答案 0 :(得分:1)

这可能是个老问题,但我会写出对我有用的内容。正如 Mike 尝试做的那样,我还使用启动任务和 powershell 脚本在 Azure Batch 节点上安装了 .net 核心。

我确认,dot net core 确实安装在不同的位置,并且路径没有导出到环境变量,而只被当前进程使用。这就是它实际上不起作用的原因

所以我在上面的开始任务代码中做了 2 个更改

  1. 在我想安装 .net core 的地方提供 InstallDir
  2. 导出环境变量的路径。

参考下面的代码,让这件事起作用

powershell "if(!([Environment]::GetEnvironmentVariable('Path', 'Machine') -split ';' -contains \"$Env:ProgramFiles\dotnet\\\")) {[Environment]::SetEnvironmentVariable('Path', \"$([Environment]::GetEnvironmentVariable('Path', 'Machine'));$Env:ProgramFiles\dotnet\\\",'Machine');}"
powershell -NoProfile -ExecutionPolicy unrestricted -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; &([scriptblock]::Create((Invoke-WebRequest -useb 'https://dot.net/v1/dotnet-install.ps1'))) -Channel LTS -InstallDir \"$Env:ProgramFiles\dotnet\\\""

此后,我可以在机器上运行我的 .net 核心代码

答案 1 :(得分:0)

古尔所说的是正确的。您可以在启动任务中通过resourceFiles安装安装文件。从那里,您可以简单地设置starttask命令行以首先指向启动任务工作目录(将在该目录中下载文件)并运行setup命令。

此处进一步解释:https://docs.microsoft.com/en-us/azure/batch/batch-api-basics#start-task

您可以在以下位置找到批处理环境变量:https://docs.microsoft.com/en-us/azure/batch/batch-compute-node-environment-variables。建议您使用它们。如果您使用这些目录的显式路径,Microsoft可以随时更改它的路径,这将在重新引导节点,重新镜像或将新节点分配给池时引入其他问题。

示例:https://docs.microsoft.com/en-us/azure/batch/batch-compute-node-environment-variables#command-line-expansion-of-environment-variables