Erweitertes Beispiel für Container
Das Beispiel-Dockerfile unter Installieren von Build Tools in einem Container verwendet immer das Image microsoft/dotnet-framework:4.8, das auf dem aktuellen Image „microsoft/windowsservercore“ und dem aktuellen Visual Studio Build Tools-Installer basiert. Wenn Sie dieses Image in einem Docker Registry veröffentlichen, damit andere es abrufen können, ist es möglicherweise für viele Szenarien geeignet. In der Praxis ist es jedoch üblicher, spezifischer zu sein, welches Basisimage Sie verwenden, welche Binärdateien Sie herunterladen und welche Toolversionen Sie installieren.
Das folgende Beispiel-Dockerfile verwendet ein spezifisches Versionstag des Images „microsoft/dotnet-framework“. Die Verwendung eines bestimmten Tags für ein Basisimage ist üblich und erleichtert es Ihnen, sich daran zu erinnern, dass das Erstellen oder Neuerstellen von Bildern immer die gleiche Basis hat.
Anmerkung
Sie können Visual Studio nicht in microsoft/windowsservercore:10.0.14393.1593 oder in einem darauf basierenden Image installieren, das bekannte Probleme beim Starten des Installers in einem Container hat. Weitere Informationen finden Sie unter Bekannte Probleme für Container.
Im folgenden Beispiel wird die neueste Version von Buildtools heruntergeladen. Wenn Sie eine frühere Version von Buildtools verwenden möchten, die Sie später in einem Container installieren können, müssen Sie zuerst erstellen und layout verwalten.
Skript installieren
Um Protokolle zu erfassen, wenn ein Installationsfehler auftritt, erstellen Sie ein Batchskript mit dem Namen "Install.cmd" im Arbeitsverzeichnis, das den folgenden Inhalt enthält:
@if not defined _echo echo off
setlocal enabledelayedexpansion
call %*
if "%ERRORLEVEL%"=="3010" (
exit /b 0
) else (
if not "%ERRORLEVEL%"=="0" (
set ERR=%ERRORLEVEL%
call C:\TEMP\collect.exe -zip:C:\vslogs.zip
exit /b !ERR!
)
)
exit /b 0
Dockerfile
Erstellen Sie im Arbeitsverzeichnis die "Dockerfile" mit dem folgenden Inhalt:
# escape=`
# Use a specific tagged image. Tags can be changed, though that is unlikely for most images.
# You could also use the immutable tag @sha256:324e9ab7262331ebb16a4100d0fb1cfb804395a766e3bb1806c62989d1fc1326
ARG FROM_IMAGE=mcr.microsoft.com/windows/servercore:ltsc2019
FROM ${FROM_IMAGE}
# Restore the default Windows shell for correct batch processing.
SHELL ["cmd", "/S", "/C"]
# Copy our Install script.
COPY Install.cmd C:\TEMP\
# Download collect.exe in case of an install failure.
ADD https://aka.ms/vscollect.exe C:\TEMP\collect.exe
# Use the latest release channel. For more control, specify the location of an internal layout.
ARG CHANNEL_URL=https://aka.ms/vs/16/release/channel
ADD ${CHANNEL_URL} C:\TEMP\VisualStudio.chman
RUN `
# Download the Build Tools bootstrapper.
curl -SL --output vs_buildtools.exe https://aka.ms/vs/16/release/vs_buildtools.exe `
`
# Install Build Tools with the Microsoft.VisualStudio.Workload.AzureBuildTools workload, excluding workloads and components with known issues.
&& (call C:\TEMP\Install.cmd vs_buildtools.exe --quiet --wait --norestart --nocache install `
--installPath "%ProgramFiles(x86)%\Microsoft Visual Studio\2019\BuildTools" `
--channelUri C:\TEMP\VisualStudio.chman `
--installChannelUri C:\TEMP\VisualStudio.chman `
--add Microsoft.VisualStudio.Workload.AzureBuildTools `
--remove Microsoft.VisualStudio.Component.Windows10SDK.10240 `
--remove Microsoft.VisualStudio.Component.Windows10SDK.10586 `
--remove Microsoft.VisualStudio.Component.Windows10SDK.14393 `
--remove Microsoft.VisualStudio.Component.Windows81SDK) `
`
# Cleanup
&& del /q vs_buildtools.exe
# Define the entry point for the Docker container.
# This entry point starts the developer command prompt and launches the PowerShell shell.
ENTRYPOINT ["C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\BuildTools\\Common7\\Tools\\VsDevCmd.bat", "&&", "powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]
# escape=`
# Use the latest Windows Server Core 2019 image.
ARG FROM_IMAGE=mcr.microsoft.com/windows/servercore:ltsc2019
FROM ${FROM_IMAGE}
# Restore the default Windows shell for correct batch processing.
SHELL ["cmd", "/S", "/C"]
# Copy our Install script.
COPY Install.cmd C:\TEMP\
# Download collect.exe in case of an install failure.
ADD https://aka.ms/vscollect.exe C:\TEMP\collect.exe
# Use the latest release channel. For more control, specify the location of an internal layout.
ARG CHANNEL_URL=https://aka.ms/vs/17/release/channel
ADD ${CHANNEL_URL} C:\TEMP\VisualStudio.chman
RUN `
# Download the Build Tools bootstrapper.
curl -SL --output vs_buildtools.exe https://aka.ms/vs/17/release/vs_buildtools.exe `
`
# Install Build Tools with the Microsoft.VisualStudio.Workload.AzureBuildTools workload, excluding workloads and components with known issues.
&& (call C:\TEMP\Install.cmd vs_buildtools.exe --quiet --wait --norestart --nocache install `
--installPath "%ProgramFiles(x86)%\Microsoft Visual Studio\2022\BuildTools" `
--channelUri C:\TEMP\VisualStudio.chman `
--installChannelUri C:\TEMP\VisualStudio.chman `
--add Microsoft.VisualStudio.Workload.AzureBuildTools `
--remove Microsoft.VisualStudio.Component.Windows10SDK.10240 `
--remove Microsoft.VisualStudio.Component.Windows10SDK.10586 `
--remove Microsoft.VisualStudio.Component.Windows10SDK.14393 `
--remove Microsoft.VisualStudio.Component.Windows81SDK) `
`
# Cleanup
&& del /q vs_buildtools.exe
# Define the entry point for the Docker container.
# This entry point starts the developer command prompt and launches the PowerShell shell.
ENTRYPOINT ["C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools\\Common7\\Tools\\VsDevCmd.bat", "&&", "powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]
Führen Sie den folgenden Befehl aus, um das Image im aktuellen Arbeitsverzeichnis zu erstellen:
docker build -t buildtools2019:16.0.28714.193 -t buildtools2019:latest -m 2GB .
docker build -t buildtools2022:17.0 -t buildtools2022:latest -m 2GB .
Sie können entweder eines der Argumente FROM_IMAGE
und CHANNEL_URL
oder beide Argumente gleichzeitig übergeben, indem Sie die Befehlszeilenoption --build-arg
verwenden, um ein anderes Basisimage oder den Speicherort des internen Layouts anzugeben, wenn Sie ein bestimmtes Image verwalten möchten.
Tipp
Eine Liste der Arbeitslasten und Komponenten finden Sie im Visual Studio Build Tools-Komponentenverzeichnis.
Diagnose von Installationsfehlern
In diesem Beispiel werden bestimmte Tools heruntergeladen und überprüft, ob die Hashes übereinstimmen. Außerdem wird das neueste Hilfsprogramm für die Visual Studio- und .NET-Protokollsammlung heruntergeladen, sodass Sie, wenn ein Installationsfehler auftritt, die Protokolle auf Ihren Hostcomputer kopieren können, um den Fehler zu analysieren.
> docker build -t buildtools2019:16.0.28714.193 -t buildtools2019:latest -m 2GB .
Sending build context to Docker daemon
...
Step 8/10 : RUN C:\TEMP\Install.cmd C:\TEMP\vs_buildtools.exe --quiet --wait --norestart --nocache ...
---> Running in 4b62b4ce3a3c
The command 'cmd /S /C C:\TEMP\Install.cmd C:\TEMP\vs_buildtools.exe ...' returned a non-zero code: 1603
> docker cp 4b62b4ce3a3c:C:\vslogs.zip "%TEMP%\vslogs.zip"
> docker build -t buildtools2022:17.0 -t buildtools2022:latest -m 2GB .
Sending build context to Docker daemon
...
Step 8/10 : RUN C:\TEMP\Install.cmd C:\TEMP\vs_buildtools.exe --quiet --wait --norestart --nocache ...
---> Running in 4b62b4ce3a3c
The command 'cmd /S /C C:\TEMP\Install.cmd C:\TEMP\vs_buildtools.exe ...' returned a non-zero code: 1603
> docker cp 4b62b4ce3a3c:C:\vslogs.zip "%TEMP%\vslogs.zip"
Nachdem die letzte Zeile abgeschlossen ist, öffnen Sie "%TEMP%\vslogs.zip" auf Ihrem Computer, oder melden Sie ein Problem auf der Website Developer Community.
Support oder Problembehandlung
Manchmal kann es zu einem Fehler kommen. Wenn es bei der Installation von Visual Studio zu einem Fehler kommt, finden Sie ausführliche Informationen im Artikel Problembehandlung bei der Visual Studio-Installation und bei Upgradefehlern.
Hier sind einige weitere Supportoptionen:
- Verwenden Sie die Supportoption Installationschat (nur auf Englisch) für Installationsprobleme.
- Melden Sie produktprobleme an uns, indem Sie das Tool "Problem melden" verwenden, das sowohl im Visual Studio Installer als auch in der Visual Studio IDE angezeigt wird. Wenn Sie ein IT-Administrator sind und Visual Studio nicht installiert haben, können Sie IT-Administratorfeedbackübermitteln.
- Schlagen Sie ein Feature vor, verfolgen Sie Produktprobleme, und finden Sie Antworten in der Visual Studio Developer Community.