如何使用PowerShell通过Dockerfile安装VS BuildTools?

问题描述 投票:0回答:1

我有这个 Windows 容器

Dockerfile
:

FROM mcr.microsoft.com/windows/servercore:ltsc2022

USER ContainerAdministrator
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'Continue'; $verbosePreference='Continue';"]

RUN Invoke-WebRequest -OutFile 'c:\install-powershell.ps1' 'https://aka.ms/install-powershell.ps1'; \
    &'c:\install-powershell.ps1' -UseMSI; \
    Remove-Item -LiteralPath 'c:\install-powershell.ps1'

RUN Invoke-WebRequest -OutFile 'c:\vs_buildtools.exe' 'https://download.visualstudio.microsoft.com/download/pr/f73d49f7-22b6-4a11-b980-72f3daae77a6/e258e16d0e663bcd43db4979704b913bec3d19c052d09ea3013803a6913f28ab/vs_BuildTools.exe'; \
    Start-Process -FilePath 'c:\vs_buildtools.exe' -ArgumentList '--wait','--quiet','--norestart','--nocache','--installPath','C:\Program Files\Microsoft\Visual Studio\2022\BuildTools','--add','Microsoft.Component.MSBuild','--add','Microsoft.VisualStudio.Component.VC.Tools.x86.x64','--add','Microsoft.VisualStudio.Component.VC.ATL','--add','Microsoft.VisualStudio.Component.Windows11SDK.22621','--add','Microsoft.Net.ComponentGroup.4.8.DeveloperTools','--add','Microsoft.VisualStudio.Component.VC.CMake.Project' -NoNewWindow -Wait; \
    Remove-Item -LiteralPath 'c:\vs_buildtools.exe'

RUN ls 'C:\Program Files\Microsoft\Visual Studio\2022\BuildTools'

ENTRYPOINT [ \
    "C:\\Program Files\\PowerShell\\7\\pwsh.exe", "-NoLogo", "-ExecutionPolicy", "Bypass", "-NoExit", "-c", \
    "&{Import-Module 'C:\\Program Files\\Microsoft\\Visual Studio\\2022\\BuildTools\\Common7\\Tools\\Microsoft.VisualStudio.DevShell.dll'; Enter-VsDevShell -VsInstallPath 'C:\\Program Files\\Microsoft Visual Studio\\2022\\BuildTools' -SkipAutomaticLocation -DevCmdArguments '-arch=x64 -host_arch=x64'}"]

Dockerfile
保存到磁盘,转到其目录并运行
docker build .

安装

pwsh
有效。安装 Visual Studio BuildTools 看起来可行,但当我查看安装位置时,它不在那里。

Step 8/9 : RUN ls 'C:\Program Files\Microsoft\Visual Studio\2022\BuildTools'
 ---> Running in 9514712729e3
ls : Cannot find path 'C:\Program Files\Microsoft\Visual
Studio\2022\BuildTools' because it does not exist.
At line:1 char:99
+ ... 'Continue'; ls 'C:\Program Files\Microsoft\Visual Studio\2022\BuildTo ...
+                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\Program File...2022\BuildToo
   ls:String) [Get-ChildItem], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetCh
   ildItemCommand

我的 Docker 或 Powershell 语法有问题吗?

.net docker powershell visual-studio-2022 windows-container
1个回答
0
投票

您不需要使用 Powershell 来安装 Visual Studio Build Tools。

尝试类似:

RUN `
    # Install VS Build Tools
    && curl -fSLo vs_BuildTools.exe https://aka.ms/vs/17/release/vs_BuildTools.exe `
    && start /w vs_BuildTools ^ `
        --installPath "%ProgramFiles(x86)%\Microsoft Visual Studio\2022\BuildTools" ^ `
        --add Microsoft.Component.ClickOnce.MSBuild ^ `
        --add Microsoft.Net.Component.4.8.1.SDK ^ `
        --add Microsoft.NetCore.Component.Runtime.6.0 ^ `
        --add Microsoft.NetCore.Component.Runtime.8.0 ^ `
        --add Microsoft.NetCore.Component.SDK ^ `
        --add Microsoft.VisualStudio.Component.NuGet.BuildTools ^ `
        --add Microsoft.VisualStudio.Component.WebDeploy ^ `
        --add Microsoft.VisualStudio.Web.BuildTools.ComponentGroup ^ `
        --add Microsoft.VisualStudio.Workload.MSBuildTools ^ `
        --quiet --norestart --nocache --wait `
    && powershell -Command "if ($err = dir $Env:TEMP -Filter dd_setup_*_errors.log | where Length -gt 0 | Get-Content) { throw $err }" `
    && del vs_BuildTools.exe

以上示例来自官方 .NET Framework 4.8 SDK Dockerfile

请参阅 Visual Studio 构建工具组件目录,获取可用于从命令行安装 Visual Studio 的组件/工作负载的完整列表。

© www.soinside.com 2019 - 2024. All rights reserved.