Løsning af MSVC141-problemer i GitHub-handlinger
Vi arbejder på et Visual Studio 2019-projekt, der for nylig begyndte at smide undtagelser relateret til manglende filer, specifikt 'atlbase.h'. Dette problem ser ud til at skyldes fraværet af MSVC141-værktøjssættet, som ikke var påkrævet før for et par måneder siden.
I denne artikel vil vi guide dig til, hvordan du opdaterer dine .yml-scripts i GitHub Actions, så de inkluderer MSVC141-værktøjssættet. Dette sikrer problemfri projektopbygning og undgår fejlen 'kan ikke åbne inkludere fil', hvilket hjælper dig med at bevare produktiviteten i dit udviklingsarbejdsgang.
Kommando | Beskrivelse |
---|---|
uses: microsoft/setup-msbuild@v1.1 | Opsætter MSBuild til GitHub Actions, hvilket muliggør opbygning af .NET-projekter. |
vs-version: 2019 | Angiver den version af Visual Studio, der skal bruges, hvilket sikrer kompatibilitet med MSVC141-værktøjssættet. |
msbuild-version: 16.x | Definerer MSBuild-versionen, tilpasser sig det nødvendige MSVC141-værktøjssæt til kompilering. |
extenda/actions/setup-nuget-sources@v0 | Konfigurerer NuGet-kilder i GitHub Actions, som er afgørende for at gendanne projektafhængigheder. |
nuget restore POS.sln | Gendanner NuGet-pakker til den angivne løsning, og løser alle afhængigheder før build. |
Copy-Item | Kopierer filer fra en placering til en anden i PowerShell, der bruges her til håndtering af databaseskabeloner. |
Start-Process | Starter en ny proces i PowerShell, nyttig til at køre installationsprogrammer eller andre eksekverbare programmer. |
vswhere.exe | Et værktøj til at lokalisere Visual Studio-installationer, der bruges til at kontrollere tilstedeværelsen af MSVC141. |
Integrering af MSVC141 Toolset i GitHub Actions
De ovenfor angivne scripts sikrer, at MSVC141-værktøjssættet er inkluderet i din GitHub Actions-arbejdsgang. Det første script opdaterer YAML-konfigurationsfilen til at inkludere trin, der er nødvendige for at opsætte de nødvendige værktøjer og miljøer. Dette inkluderer opsætning af MSBuild vha , med angivelse af Visual Studio-versionen med , og sikre, at anvendes. Disse trin sikrer, at byggemiljøet er korrekt konfigureret til at bruge MSVC141.
Derudover kontrollerer PowerShell-scriptet for tilstedeværelsen af MSVC141-værktøjssættet, der bruger . Hvis det ikke findes, starter scriptet installationsprocessen ved at køre med de nødvendige argumenter for at installere de manglende komponenter. Denne automatiserede tilgang sikrer, at det nødvendige værktøjssæt er tilgængeligt, hvilket forhindrer relateret til manglende inkludere filer som 'atlbase.h'. Ved at følge disse trin kan du opretholde en stabil og konsistent byggeproces for dine Visual Studio 2019-projekter i GitHub Actions.
Opdater .yml-script til at inkludere MSVC141-værktøjssæt
GitHub Actions 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\*
Sørg for korrekt MSVC-værktøjssæt i GitHub-handlinger
PowerShell-script til kontrol og installation af 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
Sikring af kompatibilitet med MSVC-værktøjssæt i GitHub-handlinger
Opretholdelse af kompatibilitet med forskellige værktøjssæt i et kontinuerligt integrationsmiljø (CI) som GitHub Actions er afgørende for at sikre ensartede builds og minimere fejl. Et nøgleaspekt er at holde dine konfigurationsfiler ajour med de nødvendige værktøjer og afhængigheder. I tilfælde af MSVC141 er det vigtigt at forstå, at dette værktøjssæt er afgørende for visse projekter, især dem, der er afhængige af ældre C++-biblioteker og -komponenter.
Inkludering af MSVC141-værktøjssættet i din GitHub Actions-opsætning involverer ikke kun at angive den korrekte Visual Studio-version, men også at sikre, at alle afhængigheder er løst. Dette omfatter konfiguration af NuGet-kilder korrekt og brug af hjælpeprogrammer som f.eks at verificere installationer. Automatisering af disse trin i din og PowerShell-scripts hjælper med at forhindre byggefejl og holder din CI/CD-pipeline kørende, hvilket i sidste ende sparer udviklingstid og ressourcer.
- Hvordan angiver jeg Visual Studio-versionen i GitHub Actions?
- Brug i din konfiguration for at indstille den ønskede Visual Studio-version.
- Hvad er og hvorfor bruges det?
- er et værktøj til at lokalisere Visual Studio-installationer, der sikrer, at de nødvendige værktøjssæt er tilgængelige.
- Hvordan kan jeg automatisere installationen af manglende komponenter?
- Brug i PowerShell for at køre installationsprogrammet med de nødvendige argumenter for uovervågede installationer.
- Hvorfor er det vigtigt at konfigurere NuGet-kilder?
- Konfiguration af NuGet-kilder sikrer, at alle projektafhængigheder bliver løst, hvilket er afgørende for succesfulde builds.
- Hvordan kontrollerer jeg tilstedeværelsen af MSVC141-værktøjssæt?
- Brug i et script for at bekræfte installationsstien til MSVC141-værktøjssættet.
- Hvad gør specificere?
- Den specificerer MSBuild-versionen, der skal bruges, hvilket sikrer kompatibilitet med MSVC141-værktøjssættet.
- Hvordan gendanner jeg NuGet-pakker i GitHub Actions?
- Brug kommandoen efterfulgt af din løsningsfil, f.eks .
- Hvad er formålet med handling?
- Det konfigurerer miljøet til at bruge MSBuild, som er nødvendigt for at bygge .NET-projekter i GitHub Actions.
- Hvordan kan jeg omdøbe byggeartefakter automatisk?
- Brug PowerShell-kommandoer som f.eks at omdøbe filer baseret på byggeversionen.
- Hvorfor inkludere i Java-opsætningen?
- Dette angiver den JDK-distribution, der skal bruges, hvilket sikrer, at den korrekte Java-version er installeret til dit projekt.
At sikre, at MSVC141-værktøjssættet er inkluderet i din GitHub Actions-arbejdsgang er afgørende for at opretholde stabiliteten og funktionaliteten af dine Visual Studio 2019-projekter. Ved at opdatere dine .yml-scripts og automatisere installationsprocessen kan du forhindre almindelige build-fejl relateret til manglende filer. Denne proaktive tilgang sparer ikke kun tid, men øger også effektiviteten af din CI/CD-pipeline, hvilket giver mulighed for jævnere og mere pålidelige projektopbygninger.