Veiledning for oppdatering av .yml-skript for MSVC141 i GitHub

Veiledning for oppdatering av .yml-skript for MSVC141 i GitHub
Veiledning for oppdatering av .yml-skript for MSVC141 i GitHub

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 - Windows
on:
  pull_request:
    paths-ignore:
      - 'Engine/Engine.Android/'
      - 'Mobile/'
jobs:
  build:
    runs-on: windows-2022
    defaults:
      run:
        shell: pwsh
    env:
      DEFAULT_VERSION: v17.4.500
      SolutionDir: ${{ github.workspace }}
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          token: ${{ secrets.RS_GITHUB_TOKEN }}
          submodules: true
      - uses: actions/setup-java@v4
        with:
          distribution: 'temurin'
          java-version: '11'
      - name: Setup MSBuild
        uses: microsoft/setup-msbuild@v1.1
      - name: Install Visual Studio
        uses: microsoft/setup-msbuild@v1.1
        with:
          vs-version: 2019
          msbuild-version: 16.x
      - name: Setup NuGet sources
        uses: extenda/actions/setup-nuget-sources@v0
        with:
          config-file: NuGet.Config
          sources: |
            [{
              "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 packages
        run: nuget restore POS.sln
      - name: Determine version
        id: ver
        run: .\Build\determine-version.ps1
      - name: Update assemblies
        run: .\Build\update-assemblies.ps1 ${{ steps.ver.outputs.version }} ${{ steps.ver.outputs.full-version }}
      - name: Generate database template
        run: |
          .\Common\Database\AppVeyor\gen-databases.ps1 Common\Database abcDb
          Copy-Item abcDb\Template.db -Destination Common\Database
      - name: Build solution
        run: msbuild POS.sln @Build\WindowsBuildParams.rsp
      - name: Build installation packages
        run: |
          .\Build\exit-on-failure.ps1
          msbuild Installation\Installation.sln @Build\WindowsBuildParams.rsp -p:BuildNumber=${{ steps.ver.outputs.full-version }}
          ExitOnFailure
          Get-ChildItem Installation\Bin\Release
          Rename-Item -Path Installation\Bin\Release\abc.msi -NewName abc-v${{ steps.ver.outputs.full-version }}.msi
          Rename-Item -Path Installation\Bin\Release\abc.exe -NewName abc-v${{ steps.ver.outputs.full-version }}.exe
          Rename-Item -Path Installation\Bin\Release\VRRSSurfaceComponentsEditor.msi -NewName SurfaceComponentsEditor-v${{ steps.ver.outputs.full-version }}.msi
      - name: Generate customization package
        run: .\Common\Database\AppVeyor\gen-customization-zip.ps1 Common\Database ${{ steps.ver.outputs.full-version }}
      - name: Save abc Installer
        uses: actions/upload-artifact@v3
        with:
          name: abcInstaller-v${{ steps.ver.outputs.full-version }}
          path: Installation\Bin\Release\abc-*.msi
      - name: Save abc Setup
        uses: actions/upload-artifact@v3
        with:
          name: abcSetup-v${{ steps.ver.outputs.full-version }}
          path: Installation\Bin\Release\abc-*.exe
      - name: Save Database
        uses: actions/upload-artifact@v3
        with:
          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 installationPath
if (-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" -Wait
    if ($?) {
        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

  1. Hvordan spesifiserer jeg Visual Studio-versjonen i GitHub Actions?
  2. Bruk vs-version: 2019 i din .yml konfigurasjon for å angi ønsket Visual Studio-versjon.
  3. Hva er vswhere.exe og hvorfor brukes det?
  4. vswhere.exe er et verktøy for å finne Visual Studio-installasjoner, som sikrer at de nødvendige verktøysettene er tilgjengelige.
  5. Hvordan kan jeg automatisere installasjonen av manglende komponenter?
  6. Bruk Start-Process i PowerShell for å kjøre installasjonsprogrammet med de nødvendige argumentene for uovervåket installasjon.
  7. Hvorfor er det viktig å konfigurere NuGet-kilder?
  8. Konfigurering av NuGet-kilder sikrer at alle prosjektavhengigheter blir løst, noe som er avgjørende for vellykkede bygg.
  9. Hvordan sjekker jeg om det finnes MSVC141-verktøysett?
  10. Bruk vswhere.exe i et skript for å bekrefte installasjonsbanen til MSVC141-verktøysettet.
  11. Hva gjør msbuild-version: 16.x spesifisere?
  12. Den spesifiserer MSBuild-versjonen som skal brukes, og sikrer kompatibilitet med MSVC141-verktøysettet.
  13. Hvordan gjenoppretter jeg NuGet-pakker i GitHub Actions?
  14. Bruk kommandoen nuget restore etterfulgt av løsningsfilen, som nuget restore POS.sln.
  15. Hva er hensikten med Setup MSBuild handling?
  16. Den konfigurerer miljøet til å bruke MSBuild, nødvendig for å bygge .NET-prosjekter i GitHub Actions.
  17. Hvordan kan jeg gi nytt navn til byggeartefakter automatisk?
  18. Bruk PowerShell-kommandoer som Rename-Item for å gi nytt navn til filer basert på byggeversjonen.
  19. Hvorfor inkludere distribution: 'temurin' i Java-oppsettet?
  20. 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.