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
- Hur anger jag Visual Studio-versionen i GitHub Actions?
- Använda sig av vs-version: 2019 i din .yml konfiguration för att ställa in önskad Visual Studio-version.
- Vad är vswhere.exe och varför används det?
- 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.
- Hur kan jag automatisera installationen av saknade komponenter?
- Använda sig av Start-Process i PowerShell för att köra installationsprogrammet med nödvändiga argument för obevakade installationer.
- Varför är det viktigt att konfigurera NuGet-källor?
- Konfigurering av NuGet-källor säkerställer att alla projektberoenden löses, vilket är avgörande för framgångsrika konstruktioner.
- Hur kontrollerar jag om det finns MSVC141-verktygsuppsättning?
- Använda sig av vswhere.exe i ett skript för att verifiera installationssökvägen för MSVC141-verktygsuppsättningen.
- Vad gör msbuild-version: 16.x specificera?
- Den specificerar MSBuild-versionen som ska användas, vilket säkerställer kompatibilitet med MSVC141-verktygsuppsättningen.
- Hur återställer jag NuGet-paket i GitHub Actions?
- Använd kommandot nuget restore följt av din lösningsfil, som nuget restore POS.sln.
- Vad är syftet med Setup MSBuild handling?
- Den konfigurerar miljön för att använda MSBuild, nödvändigt för att bygga .NET-projekt i GitHub Actions.
- Hur kan jag byta namn på byggartefakter automatiskt?
- Använd PowerShell-kommandon som Rename-Item för att byta namn på filer baserat på byggversionen.
- Varför inkludera distribution: 'temurin' i Java-inställningen?
- 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.