Průvodce aktualizací skriptů .yml pro MSVC141 na GitHubu

Průvodce aktualizací skriptů .yml pro MSVC141 na GitHubu
Průvodce aktualizací skriptů .yml pro MSVC141 na GitHubu

Řešení problémů MSVC141 v akcích GitHubu

Pracujeme na projektu Visual Studio 2019, který nedávno začal vyvolávat výjimky související s chybějícími soubory, konkrétně 'atlbase.h'. Zdá se, že tento problém je způsoben absencí sady nástrojů MSVC141, která ještě před několika měsíci nebyla vyžadována.

V tomto článku vás provedeme tím, jak aktualizovat skripty .yml v akcích GitHubu tak, aby zahrnovaly sadu nástrojů MSVC141. To zajišťuje plynulé sestavení projektu a zabraňuje chybě „nelze otevřít soubor začlenění“, což vám pomáhá udržovat produktivitu ve vašem vývojovém pracovním postupu.

Příkaz Popis
uses: microsoft/setup-msbuild@v1.1 Nastaví MSBuild pro akce GitHub, což umožňuje vytváření projektů .NET.
vs-version: 2019 Určuje verzi sady Visual Studio, která se má použít, a zajišťuje kompatibilitu se sadou nástrojů MSVC141.
msbuild-version: 16.x Definuje verzi MSBuild v souladu s požadovanou sadou nástrojů MSVC141 pro kompilaci.
extenda/actions/setup-nuget-sources@v0 Konfiguruje zdroje NuGet v akcích GitHub, které jsou nezbytné pro obnovení závislostí projektu.
nuget restore POS.sln Obnoví balíčky NuGet pro zadané řešení a vyřeší všechny závislosti před sestavením.
Copy-Item Zkopíruje soubory z jednoho umístění do druhého v PowerShellu, které se zde používá ke zpracování databázových šablon.
Start-Process Spustí nový proces v PowerShellu, který je užitečný pro spouštění instalačních programů nebo jiných spustitelných souborů.
vswhere.exe Nástroj pro vyhledání instalací sady Visual Studio, který se používá ke kontrole přítomnosti MSVC141.

Integrace sady nástrojů MSVC141 v akcích GitHubu

Výše uvedené skripty zajišťují, že sada nástrojů MSVC141 bude zahrnuta do vašeho pracovního postupu akcí GitHub. První skript aktualizuje konfigurační soubor YAML tak, aby obsahoval kroky nezbytné pro nastavení požadovaných nástrojů a prostředí. To zahrnuje nastavení pomocí MSBuild microsoft/setup-msbuild@v1.1, určující verzi sady Visual Studio s vs-version: 2019a zajistit, aby msbuild-version: 16.x se používá. Tyto kroky zajistí, že je prostředí sestavení správně nakonfigurováno pro použití MSVC141.

Skript PowerShell navíc kontroluje přítomnost sady nástrojů MSVC141 pomocí vswhere.exe. Pokud není nalezen, skript spuštěním zahájí proces instalace Start-Process s argumenty nezbytnými pro instalaci chybějících součástí. Tento automatizovaný přístup zajišťuje, že je k dispozici požadovaná sada nástrojů, čímž se zabrání fatal error C1083 související s chybějícími začleněnými soubory jako 'atlbase.h'. Pomocí těchto kroků můžete udržovat stabilní a konzistentní proces sestavení pro své projekty sady Visual Studio 2019 v akcích GitHub.

Aktualizujte skript .yml tak, aby zahrnoval sadu nástrojů MSVC141

Akce GitHub Konfigurace YAML

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

Zajistěte správnou sadu nástrojů MSVC v akcích GitHubu

Skript PowerShell pro kontrolu a instalaci 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

Zajištění kompatibility se sadami nástrojů MSVC v akcích GitHubu

Udržování kompatibility s různými sadami nástrojů v prostředí kontinuální integrace (CI), jako je GitHub Actions, je zásadní pro zajištění konzistentních sestav a minimalizaci chyb. Jedním z klíčových aspektů je udržovat vaše konfigurační soubory aktuální pomocí nezbytných nástrojů a závislostí. V případě MSVC141 je důležité pochopit, že tato sada nástrojů je nezbytná pro určité projekty, zejména ty, které spoléhají na starší knihovny a komponenty C++.

Zahrnutí sady nástrojů MSVC141 do vašeho nastavení akcí GitHub zahrnuje nejen určení správné verze sady Visual Studio, ale také zajištění vyřešení všech závislostí. To zahrnuje správnou konfiguraci zdrojů NuGet a používání nástrojů jako vswhere.exe pro ověření instalací. Automatizace těchto kroků ve vašem .yml a skripty PowerShellu pomáhají předcházet selháním sestavení a zajišťují hladký chod kanálu CI/CD, což v konečném důsledku šetří čas a prostředky na vývoj.

Běžné otázky a řešení pro integraci sad nástrojů MSVC

  1. Jak určím verzi sady Visual Studio v akcích GitHubu?
  2. Použití vs-version: 2019 ve vašem .yml konfiguraci pro nastavení požadované verze sady Visual Studio.
  3. co je vswhere.exe a proč se to používá?
  4. vswhere.exe je nástroj pro vyhledání instalací sady Visual Studio, který zajišťuje dostupnost požadovaných sad nástrojů.
  5. Jak mohu automatizovat instalaci chybějících komponent?
  6. Použití Start-Process v PowerShellu ke spuštění instalačního programu s nezbytnými argumenty pro bezobslužné instalace.
  7. Proč je důležité nakonfigurovat zdroje NuGet?
  8. Konfigurace zdrojů NuGet zajišťuje vyřešení všech závislostí projektu, což je klíčové pro úspěšná sestavení.
  9. Jak zjistím přítomnost sady nástrojů MSVC141?
  10. Použití vswhere.exe ve skriptu pro ověření instalační cesty sady nástrojů MSVC141.
  11. Co dělá msbuild-version: 16.x specifikovat?
  12. Určuje verzi MSBuild, která se má použít, a zajišťuje kompatibilitu se sadou nástrojů MSVC141.
  13. Jak obnovím balíčky NuGet v akcích GitHub?
  14. Použijte příkaz nuget restore následovaný souborem vašeho řešení, např nuget restore POS.sln.
  15. Jaký je účel Setup MSBuild akce?
  16. Konfiguruje prostředí pro použití MSBuild, který je nezbytný pro vytváření projektů .NET v akcích GitHub.
  17. Jak mohu automaticky přejmenovat artefakty sestavení?
  18. Používejte příkazy prostředí PowerShell jako Rename-Item přejmenovat soubory na základě verze sestavení.
  19. Proč zahrnout distribution: 'temurin' v nastavení Java?
  20. Toto určuje distribuci JDK, která se má použít, a zajišťuje, že je pro váš projekt nainstalována správná verze Java.

Závěrečné myšlenky na integraci MSVC141

Zajištění, aby byla sada nástrojů MSVC141 zahrnuta do vašeho pracovního postupu akcí GitHub, je zásadní pro zachování stability a funkčnosti vašich projektů sady Visual Studio 2019. Aktualizací skriptů .yml a automatizací procesu instalace můžete předejít běžným chybám sestavení souvisejícím s chybějícími soubory. Tento proaktivní přístup nejen šetří čas, ale také zvyšuje efektivitu vašeho CI/CD potrubí, což umožňuje hladší a spolehlivější sestavování projektů.