Guide till uppdatering av .yml-skript för MSVC141 i GitHub

Guide till uppdatering av .yml-skript för MSVC141 i GitHub
Guide till uppdatering av .yml-skript för MSVC141 i GitHub

Lösning av MSVC141-problem i GitHub Actions

Vi arbetar med ett Visual Studio 2019-projekt som nyligen började kasta undantag relaterade till saknade filer, specifikt "atlbase.h". Det här problemet verkar bero på avsaknaden av verktygsuppsättningen MSVC141, som inte krävdes förrän för några månader sedan.

I den här artikeln kommer vi att guida dig om hur du uppdaterar dina .yml-skript i GitHub Actions för att inkludera verktygsuppsättningen MSVC141. Detta säkerställer smidiga projektbyggen och undviker felet 'kan inte öppna inkludera fil', vilket hjälper dig att upprätthålla produktiviteten i ditt utvecklingsarbetsflöde.

Kommando Beskrivning
uses: microsoft/setup-msbuild@v1.1 Ställer in MSBuild för GitHub Actions, vilket gör det möjligt att bygga .NET-projekt.
vs-version: 2019 Anger vilken version av Visual Studio som ska användas, vilket säkerställer kompatibilitet med MSVC141-verktygsuppsättningen.
msbuild-version: 16.x Definierar MSBuild-versionen, i linje med den nödvändiga MSVC141-verktygsuppsättningen för kompilering.
extenda/actions/setup-nuget-sources@v0 Konfigurerar NuGet-källor i GitHub Actions, viktigt för att återställa projektberoenden.
nuget restore POS.sln Återställer NuGet-paket för den angivna lösningen, löser alla beroenden före byggandet.
Copy-Item Kopierar filer från en plats till en annan i PowerShell, som används här för att hantera databasmallar.
Start-Process Startar en ny process i PowerShell, användbar för att köra installationsprogram eller andra körbara filer.
vswhere.exe Ett verktyg för att hitta Visual Studio-installationer, som används för att kontrollera förekomsten av MSVC141.

Integrera MSVC141 Toolset i GitHub Actions

Skripten som tillhandahålls ovan säkerställer att MSVC141-verktygsuppsättningen ingår i ditt GitHub Actions-arbetsflöde. Det första skriptet uppdaterar YAML-konfigurationsfilen för att inkludera steg som krävs för att ställa in de nödvändiga verktygen och miljöerna. Detta inkluderar att ställa in MSBuild med hjälp av microsoft/setup-msbuild@v1.1, som anger Visual Studio-versionen med vs-version: 2019, och se till att msbuild-version: 16.x är använd. Dessa steg ser till att byggmiljön är korrekt konfigurerad för att använda MSVC141.

Dessutom kontrollerar PowerShell-skriptet förekomsten av MSVC141-verktygsuppsättningen som använder vswhere.exe. Om det inte hittas startar skriptet installationsprocessen genom att köra Start-Process med de nödvändiga argumenten för att installera de saknade komponenterna. Detta automatiserade tillvägagångssätt säkerställer att den nödvändiga verktygsuppsättningen är tillgänglig, vilket förhindrar fatal error C1083 relaterade till saknade inkluderar filer som 'atlbase.h'. Genom att följa dessa steg kan du upprätthålla en stabil och konsekvent byggprocess för dina Visual Studio 2019-projekt i GitHub Actions.

Uppdatera .yml-skriptet för att inkludera MSVC141 Toolset

GitHub-åtgärder YAML-konfiguration

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

Se till att MSVC Toolset är korrekt i GitHub Actions

PowerShell-skript för kontroll och installation 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

Säkerställa kompatibilitet med MSVC-verktygsuppsättningar i GitHub Actions

Att upprätthålla kompatibilitet med olika verktygsuppsättningar i en miljö med kontinuerlig integration (CI) som GitHub Actions är avgörande för att säkerställa konsekventa konstruktioner och minimera fel. En nyckelaspekt är att hålla dina konfigurationsfiler uppdaterade med nödvändiga verktyg och beroenden. När det gäller MSVC141 är det viktigt att förstå att denna verktygsuppsättning är viktig för vissa projekt, särskilt de som förlitar sig på äldre C++-bibliotek och -komponenter.

Att inkludera MSVC141-verktygsuppsättningen i din GitHub Actions-installation innebär att du inte bara specificerar rätt Visual Studio-version utan också ser till att alla beroenden löses. Detta inkluderar att konfigurera NuGet-källor korrekt och använda verktyg som vswhere.exe för att verifiera installationer. Automatisera dessa steg i din .yml och PowerShell-skript hjälper till att förhindra byggfel och håller din CI/CD-pipeline igång smidigt, vilket i slutändan sparar utvecklingstid och resurser.

Vanliga frågor och lösningar för att integrera MSVC-verktygsuppsättningar

  1. Hur anger jag Visual Studio-versionen i GitHub Actions?
  2. Använda sig av vs-version: 2019 i din .yml konfiguration för att ställa in önskad Visual Studio-version.
  3. Vad är vswhere.exe och varför används det?
  4. vswhere.exe är ett verktyg för att hitta Visual Studio-installationer, vilket säkerställer att de nödvändiga verktygsuppsättningarna är tillgängliga.
  5. Hur kan jag automatisera installationen av saknade komponenter?
  6. Använda sig av Start-Process i PowerShell för att köra installationsprogrammet med nödvändiga argument för obevakade installationer.
  7. Varför är det viktigt att konfigurera NuGet-källor?
  8. Konfigurering av NuGet-källor säkerställer att alla projektberoenden löses, vilket är avgörande för framgångsrika konstruktioner.
  9. Hur kontrollerar jag om det finns MSVC141-verktygsuppsättning?
  10. Använda sig av vswhere.exe i ett skript för att verifiera installationssökvägen för MSVC141-verktygsuppsättningen.
  11. Vad gör msbuild-version: 16.x specificera?
  12. Den specificerar MSBuild-versionen som ska användas, vilket säkerställer kompatibilitet med MSVC141-verktygsuppsättningen.
  13. Hur återställer jag NuGet-paket i GitHub Actions?
  14. Använd kommandot nuget restore följt av din lösningsfil, som nuget restore POS.sln.
  15. Vad är syftet med Setup MSBuild handling?
  16. Den konfigurerar miljön för att använda MSBuild, nödvändigt för att bygga .NET-projekt i GitHub Actions.
  17. Hur kan jag byta namn på byggartefakter automatiskt?
  18. Använd PowerShell-kommandon som Rename-Item för att byta namn på filer baserat på byggversionen.
  19. Varför inkludera distribution: 'temurin' i Java-inställningen?
  20. Detta anger JDK-distributionen som ska användas, vilket säkerställer att rätt Java-version är installerad för ditt projekt.

Sista tankar om att integrera MSVC141

Att säkerställa att MSVC141-verktygsuppsättningen ingår i ditt GitHub Actions-arbetsflöde är viktigt för att upprätthålla stabiliteten och funktionaliteten i dina Visual Studio 2019-projekt. Genom att uppdatera dina .yml-skript och automatisera installationsprocessen kan du förhindra vanliga byggfel relaterade till saknade filer. Detta proaktiva tillvägagångssätt sparar inte bara tid utan ökar också effektiviteten i din CI/CD-pipeline, vilket möjliggör smidigare och mer pålitliga projektbyggen.