Handleiding voor het bijwerken van .yml-scripts voor MSVC141 in GitHub

Handleiding voor het bijwerken van .yml-scripts voor MSVC141 in GitHub
Handleiding voor het bijwerken van .yml-scripts voor MSVC141 in GitHub

MSVC141-problemen oplossen in GitHub-acties

We werken aan een Visual Studio 2019-project dat onlangs uitzonderingen begon te genereren met betrekking tot ontbrekende bestanden, met name 'atlbase.h'. Dit probleem lijkt te wijten te zijn aan het ontbreken van de MSVC141-toolset, die tot een paar maanden geleden niet nodig was.

In dit artikel zullen we u begeleiden bij het bijwerken van uw .yml-scripts in GitHub Actions om de MSVC141-toolset op te nemen. Dit zorgt voor een soepele opbouw van projecten en vermijdt de fout 'kan bestand opnemen niet openen', waardoor u de productiviteit in uw ontwikkelingsworkflow kunt behouden.

Commando Beschrijving
uses: microsoft/setup-msbuild@v1.1 Stelt MSBuild in voor GitHub Actions, waardoor het bouwen van .NET-projecten mogelijk is.
vs-version: 2019 Specificeert de versie van Visual Studio die moet worden gebruikt, waardoor compatibiliteit met de MSVC141-toolset wordt gegarandeerd.
msbuild-version: 16.x Definieert de MSBuild-versie, afgestemd op de vereiste MSVC141-toolset voor compilatie.
extenda/actions/setup-nuget-sources@v0 Configureert NuGet-bronnen in GitHub Actions, essentieel voor het herstellen van projectafhankelijkheden.
nuget restore POS.sln Herstelt NuGet-pakketten voor de opgegeven oplossing en lost alle afhankelijkheden op voordat deze worden gebouwd.
Copy-Item Kopieert bestanden van de ene locatie naar de andere in PowerShell, hier gebruikt voor het verwerken van databasesjablonen.
Start-Process Start een nieuw proces in PowerShell, handig voor het uitvoeren van installatieprogramma's of andere uitvoerbare bestanden.
vswhere.exe Een hulpprogramma om Visual Studio-installaties te lokaliseren, gebruikt om te controleren op de aanwezigheid van MSVC141.

MSVC141-toolset integreren in GitHub-acties

De hierboven gegeven scripts zorgen ervoor dat de MSVC141-toolset wordt opgenomen in uw GitHub Actions-workflow. Het eerste script werkt het YAML-configuratiebestand bij met de stappen die nodig zijn voor het instellen van de vereiste tools en omgevingen. Dit omvat het instellen van MSBuild met behulp van microsoft/setup-msbuild@v1.1, waarbij u de Visual Studio-versie opgeeft met vs-version: 2019en ervoor te zorgen dat de msbuild-version: 16.x is gebruikt. Deze stappen zorgen ervoor dat de bouwomgeving correct is geconfigureerd voor het gebruik van MSVC141.

Bovendien controleert het PowerShell-script de aanwezigheid van de MSVC141-toolset met behulp van vswhere.exe. Als het script niet wordt gevonden, start het script het installatieproces door het uit te voeren Start-Process met de nodige argumenten om de ontbrekende componenten te installeren. Deze geautomatiseerde aanpak zorgt ervoor dat de benodigde toolset beschikbaar is, waardoor de fatal error C1083 gerelateerd aan ontbrekende include-bestanden zoals 'atlbase.h'. Door deze stappen te volgen, kunt u een stabiel en consistent bouwproces voor uw Visual Studio 2019-projecten in GitHub Actions onderhouden.

Update het .yml-script zodat het de MSVC141-toolset bevat

GitHub-acties YAML-configuratie

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\*

Zorg voor de juiste MSVC-toolset in GitHub-acties

PowerShell-script voor het controleren en installeren van 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

Zorgen voor compatibiliteit met MSVC-toolsets in GitHub-acties

Het behouden van compatibiliteit met verschillende toolsets in een continue integratie (CI)-omgeving zoals GitHub Actions is cruciaal voor het garanderen van consistente builds en het minimaliseren van fouten. Een belangrijk aspect is het up-to-date houden van uw configuratiebestanden met de benodigde tools en afhankelijkheden. In het geval van MSVC141 is het belangrijk om te begrijpen dat deze toolset essentieel is voor bepaalde projecten, vooral voor projecten die afhankelijk zijn van oudere C++-bibliotheken en -componenten.

Het opnemen van de MSVC141-toolset in uw GitHub Actions-installatie houdt niet alleen in dat u de juiste Visual Studio-versie opgeeft, maar ook dat alle afhankelijkheden worden opgelost. Dit omvat het correct configureren van NuGet-bronnen en het gebruik van hulpprogramma's zoals vswhere.exe om installaties te verifiëren. Het automatiseren van deze stappen binnen uw .yml en PowerShell-scripts helpen buildfouten te voorkomen en zorgen ervoor dat uw CI/CD-pijplijn soepel blijft werken, waardoor uiteindelijk ontwikkelingstijd en middelen worden bespaard.

Veelgestelde vragen en oplossingen voor het integreren van MSVC-toolsets

  1. Hoe geef ik de Visual Studio-versie op in GitHub Actions?
  2. Gebruik vs-version: 2019 in uw .yml configuratie om de gewenste Visual Studio-versie in te stellen.
  3. Wat is vswhere.exe en waarom wordt het gebruikt?
  4. vswhere.exe is een hulpprogramma waarmee u Visual Studio-installaties kunt lokaliseren, zodat u zeker weet dat de vereiste toolsets beschikbaar zijn.
  5. Hoe kan ik de installatie van ontbrekende componenten automatiseren?
  6. Gebruik Start-Process in PowerShell om het installatieprogramma uit te voeren met de nodige argumenten voor installaties zonder toezicht.
  7. Waarom is het belangrijk om NuGet-bronnen te configureren?
  8. Het configureren van NuGet-bronnen zorgt ervoor dat alle projectafhankelijkheden worden opgelost, wat cruciaal is voor succesvolle builds.
  9. Hoe controleer ik de aanwezigheid van de MSVC141-toolset?
  10. Gebruik vswhere.exe in een script om het installatiepad van de MSVC141-toolset te verifiëren.
  11. Wat doet msbuild-version: 16.x specificeren?
  12. Het specificeert de te gebruiken MSBuild-versie, waardoor compatibiliteit met de MSVC141-toolset wordt gegarandeerd.
  13. Hoe herstel ik NuGet-pakketten in GitHub Actions?
  14. Gebruik de opdracht nuget restore gevolgd door uw oplossingsbestand, zoals nuget restore POS.sln.
  15. Wat is het doel van de Setup MSBuild actie?
  16. Het configureert de omgeving om MSBuild te gebruiken, noodzakelijk voor het bouwen van .NET-projecten in GitHub Actions.
  17. Hoe kan ik de naam van bouwartefacten automatisch wijzigen?
  18. Gebruik PowerShell-opdrachten zoals Rename-Item om bestanden te hernoemen op basis van de buildversie.
  19. Waarom opnemen distribution: 'temurin' in de Java-setup?
  20. Hiermee wordt aangegeven welke JDK-distributie moet worden gebruikt, zodat de juiste Java-versie voor uw project wordt geïnstalleerd.

Laatste gedachten over de integratie van MSVC141

Ervoor zorgen dat de MSVC141-toolset is opgenomen in uw GitHub Actions-workflow is essentieel voor het behouden van de stabiliteit en functionaliteit van uw Visual Studio 2019-projecten. Door uw .yml-scripts bij te werken en het installatieproces te automatiseren, kunt u veelvoorkomende bouwfouten met betrekking tot ontbrekende bestanden voorkomen. Deze proactieve aanpak bespaart niet alleen tijd, maar verbetert ook de efficiëntie van uw CI/CD-pijplijn, waardoor een soepelere en betrouwbaardere projectopbouw mogelijk wordt.