Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
U kunt Visual Studio Build Tools installeren in een Windows-container ter ondersteuning van CI/CD-werkstromen (continue integratie en continue levering). In dit artikel wordt uitgelegd welke wijzigingen in de Docker-configuratie vereist zijn, evenals welke workloads en onderdelen u in een container kunt installeren.
Containers zijn een uitstekende manier om een consistent buildsysteem te verpakken dat u kunt gebruiken, niet alleen in een CI/CD-serveromgeving, maar ook voor ontwikkelomgevingen. U kunt uw broncode bijvoorbeeld koppelen aan een container die moet worden gebouwd door een aangepaste omgeving terwijl u Visual Studio of andere hulpprogramma's blijft gebruiken om uw code te schrijven. Als uw CI/CD-werkstroom gebruikmaakt van dezelfde containerimage, kunt u erop vertrouwen dat uw code consistent gebouwd wordt. U kunt containers ook gebruiken voor runtimeconsistentie, wat gebruikelijk is voor microservices die meerdere containers gebruiken met een indelingssysteem; dat valt echter buiten het bereik van dit artikel.
Als Visual Studio Build Tools niet beschikt over wat u nodig hebt om uw broncode te bouwen, kunnen dezelfde stappen worden gebruikt voor andere Visual Studio-producten. Houd er echter rekening mee dat Windows-containers geen ondersteuning bieden voor een interactieve gebruikersinterface, zodat alle opdrachten moeten worden geautomatiseerd.
Voordat u begint
Er wordt uitgegaan van enige bekendheid met Docker . Als u er niet bekend mee bent, leert u hoe u de Docker-engine installeert en configureert in Windows.
De volgende basisafbeelding is een voorbeeld en kan mogelijk niet werken voor uw systeem. Om te bepalen welke basisimage u voor uw omgeving moet gebruiken, leest u Windowscontainer-versiecompatibiliteit.
Het Dockerfile maken en bouwen
Sla het volgende voorbeeld van Dockerfile op in een nieuw bestand op uw schijf. Als het bestand gewoon Dockerfile heet, wordt het standaard herkend.
Waarschuwing
In dit voorbeeld sluit Dockerfile alleen eerdere Windows SDK's uit die niet in containers kunnen worden geïnstalleerd. Eerdere versies zorgen ervoor dat de build-opdracht mislukt.
Open een opdrachtprompt.
Een nieuwe map maken (aanbevolen):
mkdir C:\BuildToolsWijzig mappen in deze nieuwe map:
cd C:\BuildToolsSla de volgende inhoud op in C:\BuildTools\Dockerfile.
# escape=` # Use the latest Windows Server Core 2022 image. FROM mcr.microsoft.com/windows/servercore:ltsc2022 # Restore the default Windows shell for correct batch processing. SHELL ["cmd", "/S", "/C"] 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. && (start /w vs_buildtools.exe --quiet --wait --norestart --nocache ` --installPath "%ProgramFiles(x86)%\Microsoft Visual Studio\2022\BuildTools" ` --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 ` || IF "%ERRORLEVEL%"=="3010" EXIT 0) ` ` # 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"]Aanbeveling
Als u de 64-bits wilt instellen, geeft u de
-arch=amd64optie op in deENTRYPOINTopdracht om de opdrachtprompt voor ontwikkelaars voor Visual Studio (VSDevCmd.bat) te starten.Bijvoorbeeld:
ENTRYPOINT ["C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools\\Common7\\Tools\\VsDevCmd.bat", "-arch=amd64", "&&", "powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]Waarschuwing
Als u uw image rechtstreeks baseert op microsoft/windowsservercore, kan de .NET Framework mogelijk niet correct worden geïnstalleerd en wordt er geen installatiefout aangegeven. Beheerde code wordt mogelijk niet uitgevoerd nadat de installatie is voltooid. Baseer in plaats daarvan uw image op microsoft/dotnet-framework:4.8 of hoger. Houd er ook rekening mee dat installatiekopieën die zijn getagd met versie 4.8 of hoger, mogelijk PowerShell als standaard
SHELLgebruiken, wat kan veroorzaken dat deRUNenENTRYPOINTinstructies mislukken.Raadpleeg de Windows-container versiecompatibiliteit voor meer informatie over welke container-OS-versies worden ondersteund door welke host-OS-versies. Raadpleeg problemen oplossen met Windows en Build Tools-containers voor bekende problemen.
Opmerking
Foutcode
3010wordt gebruikt om aan te geven dat succes is behaald, maar dat een herstart van de computer vereist is. Zie MsiExec.exe foutberichten voor meer informatie.Voer de volgende opdracht uit in die map.
docker build -t buildtools:latest -m 2GB .Met deze opdracht wordt het Dockerfile in de huidige map gebouwd met 2 GB geheugen. De standaardwaarde van 1 GB is niet voldoende wanneer sommige workloads zijn geïnstalleerd; Mogelijk kunt u echter met slechts 1 GB geheugen bouwen, afhankelijk van uw buildvereisten.
De uiteindelijke afbeelding is gelabeld buildtools:latest zodat u het eenvoudig kunt uitvoeren in een container als buildtools, omdat de latest tag de standaard is als er geen tag is opgegeven. Als u een specifieke versie van Visual Studio Build Tools in een geavanceerder scenario wilt gebruiken, kunt u in plaats daarvan de container taggen met een specifiek Visual Studio-buildnummer en de meest recente versie, zodat containers consistent een specifieke versie kunnen gebruiken.
De gebouwde image gebruiken
Nu u een image hebt gemaakt, kunt u deze binnen een container uitvoeren om zowel interactieve als geautomatiseerde builds uit te voeren. In het voorbeeld wordt de opdrachtprompt voor ontwikkelaars gebruikt, zodat uw PATH- en andere omgevingsvariabelen al zijn geconfigureerd.
Open een opdrachtprompt.
Voer de container uit om een PowerShell-omgeving te starten met alle omgevingsvariabelen voor ontwikkelaars:
docker run -it buildtools
Als u deze installatiekopie wilt gebruiken voor uw CI/CD-werkstroom, kunt u deze publiceren naar uw eigen Azure Container Registry of een ander intern Docker-register, zodat servers deze alleen hoeven op te halen.
Opmerking
Als de Docker-container niet kan worden gestart, is er waarschijnlijk een installatieprobleem met Visual Studio. U kunt het Dockerfile bijwerken om de stap te verwijderen die de Visual Studio-batchopdracht aanroept. Met deze functie kunt u de Docker-container starten en de installatie-foutlogboeken lezen.
Verwijder in het Dockerfile-bestand de C:\\BuildTools\\Common7\\Tools\\VsDevCmd.bat en && parameters uit de ENTRYPOINT opdracht. De opdracht moet nu zijn ENTRYPOINT ["powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]. Bouw vervolgens het Dockerfile opnieuw en voer de run opdracht uit om toegang te krijgen tot containerbestanden. Ga naar de $env:TEMP map en zoek het dd_setup_<timestamp>_errors.log bestand om de installatiefoutenlogboeken te vinden.
Nadat u het installatieprobleem hebt geïdentificeerd en opgelost, kunt u de C:\\BuildTools\\Common7\\Tools\\VsDevCmd.bat en && parameters weer toevoegen aan de ENTRYPOINT opdracht en uw Dockerfile opnieuw bouwen.
Zie Windows- en Build Tools-containers oplossen voor meer informatie.
Problemen met Windows- en Build Tools-containers oplossen
Er zijn enkele problemen bij het installeren van Visual Studio in een Docker-container.
Problemen met Windows-containers oplossen
De volgende bekende problemen treden op wanneer u Visual Studio Build Tools installeert in een Windows-container.
Geef
-m 2GB(of meer) door bij het genereren van de image. Voor sommige workloads is meer geheugen nodig dan de standaard 1 GB wanneer deze is geïnstalleerd.Configureer Docker voor het gebruik van schijven die groter zijn dan de standaard 20 GB.
Geef
--norestartde opdrachtregel door. Op het moment van schrijven, keert een poging om een Windows-container vanuit de container opnieuw op te starten, terug naar de host.Als u uw installatiekopieën rechtstreeks op mcr.microsoft.com/windows/servercore baseeert, wordt het .NET Framework mogelijk niet correct geïnstalleerd en wordt er geen installatiefout aangegeven. Beheerde code wordt mogelijk niet uitgevoerd nadat de installatie is voltooid. Baseer uw image op microsoft/dotnet-framework:4.7.1 of hoger. Als voorbeeld ziet u mogelijk een fout bij het bouwen met MSBuild die vergelijkbaar is met het volgende:
C:\BuildTools\MSBuild\15.0\bin\Roslyn\Microsoft.CSharp.Core.targets(84,5): fout MSB6003: Het opgegeven uitvoerbare taakbestandcsc.exekan niet worden uitgevoerd. Kan bestand of assembly 'System.IO.FileSystem, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' of een van de bijbehorende afhankelijkheden niet laden. Het systeem kan het opgegeven bestand niet vinden.
Problemen met Build Tools-containers oplossen
De volgende bekende problemen kunnen optreden wanneer u een Build Tools-container gebruikt. Als u wilt zien of er problemen zijn opgelost of als er andere bekende problemen zijn, gaat u naar de Ontwikkelaarscommunity.
- IntelliTrace werkt mogelijk niet in sommige scenario's binnen een container.
- In oudere versies van Docker voor Windows is de standaardgrootte van de containerinstallatiekopieën slechts 20 GB en past deze niet bij Build Tools. Volg de instructies om de grootte van het schijfbeeld te wijzigen naar 127 GB of meer.
Als u een probleem met schijfruimte wilt bevestigen, controleert u de logboekbestanden voor meer informatie. Uw
vslogs\dd_setup_<timestamp>_errors.logbestand bevat het volgende als u onvoldoende schijfruimte hebt:
Pre-check verification: Visual Studio needs at least 91.99 GB of disk space. Try to free up space on C:\ or change your target drive.
Pre-check verification failed with error(s) : SizePreCheckEvaluator.