Løse MSVC141-problemer i GitHub Actions
Vi jobber med et Visual Studio 2019-prosjekt som nylig begynte å gi unntak relatert til manglende filer, spesielt 'atlbase.h'. Dette problemet ser ut til å skyldes fraværet av MSVC141-verktøysettet, som ikke var nødvendig før for noen måneder siden.
I denne artikkelen vil vi veilede deg om hvordan du oppdaterer .yml-skriptene dine i GitHub Actions for å inkludere MSVC141-verktøysettet. Dette sikrer jevn prosjektbygging og unngår feilen 'kan ikke åpne inkluder fil', noe som hjelper deg med å opprettholde produktiviteten i utviklingsarbeidsflyten.
| Kommando | Beskrivelse |
|---|---|
| uses: microsoft/setup-msbuild@v1.1 | Setter opp MSBuild for GitHub Actions, som tillater bygging av .NET-prosjekter. |
| vs-version: 2019 | Spesifiserer versjonen av Visual Studio som skal brukes, og sikrer kompatibilitet med MSVC141-verktøysettet. |
| msbuild-version: 16.x | Definerer MSBuild-versjonen, i samsvar med det nødvendige MSVC141-verktøysettet for kompilering. |
| extenda/actions/setup-nuget-sources@v0 | Konfigurerer NuGet-kilder i GitHub Actions, avgjørende for å gjenopprette prosjektavhengigheter. |
| nuget restore POS.sln | Gjenoppretter NuGet-pakker for den spesifiserte løsningen, og løser alle avhengigheter før bygg. |
| Copy-Item | Kopierer filer fra ett sted til et annet i PowerShell, brukt her for håndtering av databasemaler. |
| Start-Process | Starter en ny prosess i PowerShell, nyttig for å kjøre installasjonsprogrammer eller andre kjørbare filer. |
| vswhere.exe | Et verktøy for å finne Visual Studio-installasjoner, brukt til å sjekke forekomsten av MSVC141. |
Integrering av MSVC141 Toolset i GitHub Actions
Skriptene ovenfor sikrer at MSVC141-verktøysettet er inkludert i arbeidsflyten for GitHub Actions. Det første skriptet oppdaterer YAML-konfigurasjonsfilen til å inkludere trinn som er nødvendige for å sette opp de nødvendige verktøyene og miljøene. Dette inkluderer å sette opp MSBuild ved hjelp av microsoft/setup-msbuild@v1.1, som spesifiserer Visual Studio-versjonen med vs-version: 2019, og sikre at msbuild-version: 16.x benyttes. Disse trinnene sørger for at byggemiljøet er riktig konfigurert til å bruke MSVC141.
I tillegg sjekker PowerShell-skriptet for tilstedeværelsen av MSVC141-verktøysettet som bruker vswhere.exe. Hvis det ikke blir funnet, starter skriptet installasjonsprosessen ved å kjøre Start-Process med de nødvendige argumentene for å installere de manglende komponentene. Denne automatiserte tilnærmingen sikrer at det nødvendige verktøysettet er tilgjengelig, og forhindrer fatal error C1083 relatert til manglende inkluderer filer som 'atlbase.h'. Ved å følge disse trinnene kan du opprettholde en stabil og konsistent byggeprosess for Visual Studio 2019-prosjektene dine i GitHub Actions.
Oppdater .yml-skriptet for å inkludere MSVC141-verktøysettet
GitHub Actions YAML-konfigurasjon
name: Pull request - Windowson:pull_request:paths-ignore:- 'Engine/Engine.Android/'- 'Mobile/'jobs:build:runs-on: windows-2022defaults:run:shell: pwshenv:DEFAULT_VERSION: v17.4.500SolutionDir: ${{ github.workspace }}steps:- name: Checkoutuses: actions/checkout@v3with:token: ${{ secrets.RS_GITHUB_TOKEN }}submodules: true- uses: actions/setup-java@v4with:distribution: 'temurin'java-version: '11'- name: Setup MSBuilduses: microsoft/setup-msbuild@v1.1- name: Install Visual Studiouses: microsoft/setup-msbuild@v1.1with:vs-version: 2019msbuild-version: 16.x- name: Setup NuGet sourcesuses: extenda/actions/setup-nuget-sources@v0with:config-file: NuGet.Configsources: |[{"name": "Nexus","source": "https://repo.extendaretail.com/repository/nuget-hosted/","username": "${{ secrets.NEXUS_USERNAME }}","password": "${{ secrets.NEXUS_PASSWORD }}","apikey": "${{ secrets.NUGET_API_KEY }}"}]- name: Restore NuGet packagesrun: nuget restore POS.sln- name: Determine versionid: verrun: .\Build\determine-version.ps1- name: Update assembliesrun: .\Build\update-assemblies.ps1 ${{ steps.ver.outputs.version }} ${{ steps.ver.outputs.full-version }}- name: Generate database templaterun: |.\Common\Database\AppVeyor\gen-databases.ps1 Common\Database abcDbCopy-Item abcDb\Template.db -Destination Common\Database- name: Build solutionrun: msbuild POS.sln @Build\WindowsBuildParams.rsp- name: Build installation packagesrun: |.\Build\exit-on-failure.ps1msbuild Installation\Installation.sln @Build\WindowsBuildParams.rsp -p:BuildNumber=${{ steps.ver.outputs.full-version }}ExitOnFailureGet-ChildItem Installation\Bin\ReleaseRename-Item -Path Installation\Bin\Release\abc.msi -NewName abc-v${{ steps.ver.outputs.full-version }}.msiRename-Item -Path Installation\Bin\Release\abc.exe -NewName abc-v${{ steps.ver.outputs.full-version }}.exeRename-Item -Path Installation\Bin\Release\VRRSSurfaceComponentsEditor.msi -NewName SurfaceComponentsEditor-v${{ steps.ver.outputs.full-version }}.msi- name: Generate customization packagerun: .\Common\Database\AppVeyor\gen-customization-zip.ps1 Common\Database ${{ steps.ver.outputs.full-version }}- name: Save abc Installeruses: actions/upload-artifact@v3with:name: abcInstaller-v${{ steps.ver.outputs.full-version }}path: Installation\Bin\Release\abc-*.msi- name: Save abc Setupuses: actions/upload-artifact@v3with:name: abcSetup-v${{ steps.ver.outputs.full-version }}path: Installation\Bin\Release\abc-*.exe- name: Save Databaseuses: actions/upload-artifact@v3with:name: Database-v${{ steps.ver.outputs.full-version }}path: Common\Database\CustomizationTemplate\*
Sørg for riktig MSVC-verktøysett i GitHub-handlinger
PowerShell-skript for kontroll og installasjon av MSVC141
$vswherePath = "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"if (-Not (Test-Path $vswherePath)) {Write-Error "vswhere.exe not found at $vswherePath"exit 1}$vsInstallPath = & $vswherePath -latest -products * -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 -property installationPathif (-Not $vsInstallPath) {Write-Output "MSVC141 not found. Installing..."Start-Process -FilePath "cmd.exe" -ArgumentList "/c start /wait vs_installer.exe --quiet --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 --includeRecommended --includeOptional" -Waitif ($?) {Write-Output "MSVC141 installation completed."}else {Write-Error "Failed to install MSVC141."exit 1}} else {Write-Output "MSVC141 already installed at $vsInstallPath"}exit 0
Sikre kompatibilitet med MSVC-verktøysett i GitHub Actions
Å opprettholde kompatibilitet med ulike verktøysett i et kontinuerlig integrasjon (CI) miljø som GitHub Actions er avgjørende for å sikre konsistente bygg og minimere feil. Et nøkkelaspekt er å holde konfigurasjonsfilene dine oppdatert med de nødvendige verktøyene og avhengighetene. Når det gjelder MSVC141, er det viktig å forstå at dette verktøysettet er avgjørende for visse prosjekter, spesielt de som er avhengige av eldre C++-biblioteker og -komponenter.
Inkludering av MSVC141-verktøysettet i GitHub Actions-oppsettet innebærer ikke bare å spesifisere riktig Visual Studio-versjon, men også å sikre at alle avhengigheter blir løst. Dette inkluderer å konfigurere NuGet-kilder riktig og bruke verktøy som vswhere.exe for å verifisere installasjoner. Automatisering av disse trinnene i din .yml og PowerShell-skript hjelper til med å forhindre byggefeil og holder CI/CD-pipelinen i gang jevnt, noe som til slutt sparer utviklingstid og ressurser.
Vanlige spørsmål og løsninger for integrering av MSVC-verktøysett
- Hvordan spesifiserer jeg Visual Studio-versjonen i GitHub Actions?
- Bruk vs-version: 2019 i din .yml konfigurasjon for å angi ønsket Visual Studio-versjon.
- Hva er vswhere.exe og hvorfor brukes det?
- vswhere.exe er et verktøy for å finne Visual Studio-installasjoner, som sikrer at de nødvendige verktøysettene er tilgjengelige.
- Hvordan kan jeg automatisere installasjonen av manglende komponenter?
- Bruk Start-Process i PowerShell for å kjøre installasjonsprogrammet med de nødvendige argumentene for uovervåket installasjon.
- Hvorfor er det viktig å konfigurere NuGet-kilder?
- Konfigurering av NuGet-kilder sikrer at alle prosjektavhengigheter blir løst, noe som er avgjørende for vellykkede bygg.
- Hvordan sjekker jeg om det finnes MSVC141-verktøysett?
- Bruk vswhere.exe i et skript for å bekrefte installasjonsbanen til MSVC141-verktøysettet.
- Hva gjør msbuild-version: 16.x spesifisere?
- Den spesifiserer MSBuild-versjonen som skal brukes, og sikrer kompatibilitet med MSVC141-verktøysettet.
- Hvordan gjenoppretter jeg NuGet-pakker i GitHub Actions?
- Bruk kommandoen nuget restore etterfulgt av løsningsfilen, som nuget restore POS.sln.
- Hva er hensikten med Setup MSBuild handling?
- Den konfigurerer miljøet til å bruke MSBuild, nødvendig for å bygge .NET-prosjekter i GitHub Actions.
- Hvordan kan jeg gi nytt navn til byggeartefakter automatisk?
- Bruk PowerShell-kommandoer som Rename-Item for å gi nytt navn til filer basert på byggeversjonen.
- Hvorfor inkludere distribution: 'temurin' i Java-oppsettet?
- Dette spesifiserer JDK-distribusjonen som skal brukes, og sikrer at riktig Java-versjon er installert for prosjektet ditt.
Siste tanker om integrering av MSVC141
Å sikre at MSVC141-verktøysettet er inkludert i GitHub Actions-arbeidsflyten din er avgjørende for å opprettholde stabiliteten og funksjonaliteten til Visual Studio 2019-prosjektene dine. Ved å oppdatere .yml-skriptene dine og automatisere installasjonsprosessen kan du forhindre vanlige byggefeil relatert til manglende filer. Denne proaktive tilnærmingen sparer ikke bare tid, men forbedrer også effektiviteten til CI/CD-pipelinen din, og muliggjør jevnere og mer pålitelige prosjektbygginger.