I have this Windows container 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 FilesMicrosoftVisual Studio2022BuildTools','--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 FilesMicrosoftVisual Studio2022BuildTools'
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'}"]
Save Dockerfile
to disk, go to its directory and run docker build .
.
Installing pwsh
works. Installing Visual Studio BuildTools looks like it works, but when I look at the install location it isn’t there.
Step 8/9 : RUN ls 'C:Program FilesMicrosoftVisual Studio2022BuildTools'
---> Running in 9514712729e3
ls : Cannot find path 'C:Program FilesMicrosoftVisual
Studio2022BuildTools' because it does not exist.
At line:1 char:99
+ ... 'Continue'; ls 'C:Program FilesMicrosoftVisual Studio2022BuildTo ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:Program File...2022BuildToo
ls:String) [Get-ChildItem], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetCh
ildItemCommand
Is there something wrong with my Docker or Powershell syntax?
You don’t need to use Powershell to install Visual Studio Build Tools.
Try something like:
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 Studio2022BuildTools" ^ `
--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
The above sample is from the official .NET Framework 4.8 SDK Dockerfile.
Please refer to the Visual Studio Build Tools component directory for a complete list of the components/workloads that you can use to install Visual Studio from the command line.