Visual Studio ohne Installation
« | 31 Oct 2020 | »Wie kann ich einen alten Compiler auf einer neuen Windows Plattform ohne Installation zum Laufen bekommen ?
Oder anders gefragt: Wie kann man Visual Studio Alt bis Uralt (z.B. 2005) in einem Docker-Container zum Arbeiten bewegen?
MSVC 2017 ist (zu) einfach …
Das Build-Tools Installationsprogramm vs_BuildTools.exe
ist seit Studio 2017
Docker-fähig und deshalb gibt es eine offizielle Installationsprozedur.
Ich füge dann noch GIT und
CMake hinzu, damit man direkt aus der
Umgebung Code herunterladen und bauen kann.
Die Programme werden einfach in das Image kopiert und danach werden per
SETX
die Umgebungsvariablen wie PATH
angepasst.
Mein Dockerfile
sieht dann etwa so aus:
1FROM mcr.microsoft.com/windows/servercore:ltsc2016 2 3SHELL ["cmd", "/S", "/C"] 4COPY ["cmake", "C:/Program Files/cmake"] 5COPY ["Git", "C:/Program Files/Git"] 6RUN SETX PATH "%PATH%;C:\Program Files\Git\cmd;C:\Program Files\cmake\bin" 7RUN MKDIR C:\TEMP 8ADD vs_BuildTools_2017.exe /TEMP/vs_buildtools.exe 9RUN C:\TEMP\vs_buildtools.exe --quiet --wait --norestart --nocache \ 10 --installPath C:\BuildTools \ 11 --add Microsoft.VisualStudio.Workload.VCTools \ 12 --add Microsoft.VisualStudio.Component.WinXP \ 13 --add Microsoft.VisualStudio.ComponentGroup.NativeDesktop.WinXP \ 14 --add Microsoft.VisualStudio.Component.Windows81SDK \ 15 --add Microsoft.VisualStudio.Component.Windows10SDK.10580 \ 16 --add Microsoft.VisualStudio.Component.Windows10SDK.14393 \ 17 || IF "%ERRORLEVEL%"=="3010" EXIT 0 18 19ENTRYPOINT ["C:\\BuildTools\\Common7\\Tools\\VsDevCmd.bat", "&&", ` 20 "powershell.exe", "-NoLogo", "-ExecutionPolicy", "Bypass"]
Aber mein geschätztes Studio 2005 für die alten NT4 und Win2K Builds lässt sich so nicht aufsetzen.
MSVC 2005 per XCOPY ausrollen
Damit man per CMake
einen MSVC 2005
Build durchführen zu können, braucht man
eigentlich nur folgende Zutaten:
- CMake 3.11.4 (oder älter für
MSVC 2005
)
einfach nachC:\Program Files\CMake
kopieren und in denPATH
aufnehmen. - dotNet Framework 2.0
Wird heute perdism
bereitgestellt, und zwar mit:
dism /online /Enable-Feature /FeatureName:NetFx3ServerFeatures
dism /online /Enable-Feature /FeatureName:NetFx3
- Visual Studio 2005 Redistributable (X86 + X64 + Debug)
- Studio 2005 Kopie aus
Program Files (x86)
Man installiert am besten eine vollständige MSVC 2005 in eine virtuelle Maschine und kopiert dann den OrdnerC:\Program Files (x86)\Microsoft Visual Studio 8
- Umgebungsvariable
VS80COMNTOOLS
Diese muss aufC:\Program Files (x86)\Microsoft Visual Studio 8\Common7\Tools\
zeigen, und ganz wichtig ist der Backslash am Ende. vcvarsall.bat
muss ausgeführt werden.
Wenn man mit Docker arbeitet muss man sich etwas für das dism
Kommando
überlegen, denn das Image beinhaltet das dotNet-Installationspaket nicht.
Bei meinem Server 2016 musste ich aus der Installations-CD die Datei
server2016\sources\sxs\microsoft-windows-netfx3-ondemand-package.cab
ins Image kopieren (z.B. nach c:\windows\temp
) und dort per
dism /online /Enable-Feature /FeatureName:NetFx3 /All /Source:c:\windows\temp /NoRestart
integrieren lassen.
Die Visual Studio 2005 Runtime existiert als zwei Downloads: vcredist_x86.exe
und vcredist_x64.exe
. Beide lassen sich per Konsolenkommando
start /wait path\to\vcredist_xYZ.exe /Q
installieren.
Wäre da nicht CMake, das zum Bauen seiner Test-Pakete Debug-Binaries erzeugt.
Denn die brauchen die Debug-Runtime und die wird offiziell nicht distribuiert
und ist nur Teil einer Visual Studio Installation.
Es gibt aber einen Ausweg bzw Umweg:
Man kann einen eigenes [MSI Paket] in einen normal installierten
Visual Studio 2005 erstellen, das die so genannten “Merge-Module” der
Debug-Runtime beinhaltet. Ich habe mir also ein Hello-World Konsolenprogramm
erstellt und einen Installer daran gehängt, der die VC80_Debug*
MSM Dateien
in C:\Program Files (x86)\Common Files\Merge Modules
als Merge-Module
hinzugefügt bekommen hat.
Und das entstandene MSI-Paket kann dann wieder einfach per
start /wait msiexec /i path/to/debug-rt-inst.msi
installiert werden und
schon liegen die benötigten Debug-Dateien in C:\Windows\WinSXS
, wo man
sie sonst nur schwer in korrekter Form hinbekommt.
Fazit
Nun, die Prozedur ist jetzt mal ein experimenteller Ansatz und ich kann so
auf jeden Fall per CMake
erstellte
NMAKE
MSVC 2005 Projekte sogar im Docker auf Server 2016
bauen lassen.
MSBUILD
erweist sich im Docker Container immer noch bockig und verlangt
eine Neuinstallation von Visual Studio. Vermutlich fehlen Dateien oder
Registry-Hacks, aber ich bin vorerst auch mit NMAKE
Builds zufrieden.
In der Praxis werde ich weiter meine vollständige Studio-Installation in einer WinXP bzw. Server2003 VM nutzen, aber die Möglichkeit, dass die Installation durch ein “Fast-XCOPY” Deployment ersetzt werden kann, gefällt mir.
Mal sehen, ob sich das noch ausbauen lässt …