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 , waarbij u de Visual Studio-versie opgeeft met en ervoor te zorgen dat de 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 . Als het script niet wordt gevonden, start het script het installatieproces door het uit te voeren met de nodige argumenten om de ontbrekende componenten te installeren. Deze geautomatiseerde aanpak zorgt ervoor dat de benodigde toolset beschikbaar is, waardoor de 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 om installaties te verifiëren. Het automatiseren van deze stappen binnen uw 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.
- Hoe geef ik de Visual Studio-versie op in GitHub Actions?
- Gebruik in uw configuratie om de gewenste Visual Studio-versie in te stellen.
- Wat is en waarom wordt het gebruikt?
- is een hulpprogramma waarmee u Visual Studio-installaties kunt lokaliseren, zodat u zeker weet dat de vereiste toolsets beschikbaar zijn.
- Hoe kan ik de installatie van ontbrekende componenten automatiseren?
- Gebruik in PowerShell om het installatieprogramma uit te voeren met de nodige argumenten voor installaties zonder toezicht.
- Waarom is het belangrijk om NuGet-bronnen te configureren?
- Het configureren van NuGet-bronnen zorgt ervoor dat alle projectafhankelijkheden worden opgelost, wat cruciaal is voor succesvolle builds.
- Hoe controleer ik de aanwezigheid van de MSVC141-toolset?
- Gebruik in een script om het installatiepad van de MSVC141-toolset te verifiëren.
- Wat doet specificeren?
- Het specificeert de te gebruiken MSBuild-versie, waardoor compatibiliteit met de MSVC141-toolset wordt gegarandeerd.
- Hoe herstel ik NuGet-pakketten in GitHub Actions?
- Gebruik de opdracht gevolgd door uw oplossingsbestand, zoals .
- Wat is het doel van de actie?
- Het configureert de omgeving om MSBuild te gebruiken, noodzakelijk voor het bouwen van .NET-projecten in GitHub Actions.
- Hoe kan ik de naam van bouwartefacten automatisch wijzigen?
- Gebruik PowerShell-opdrachten zoals om bestanden te hernoemen op basis van de buildversie.
- Waarom opnemen in de Java-setup?
- Hiermee wordt aangegeven welke JDK-distributie moet worden gebruikt, zodat de juiste Java-versie voor uw project wordt geïnstalleerd.
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.