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 , som anger Visual Studio-versionen med , och se till att ä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 . Om det inte hittas startar skriptet installationsprocessen genom att köra 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 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 för att verifiera installationer. Automatisera dessa steg i din 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.
- Hur anger jag Visual Studio-versionen i GitHub Actions?
- Använda sig av i din konfiguration för att ställa in önskad Visual Studio-version.
- Vad är och varför används det?
- ä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 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 i ett skript för att verifiera installationssökvägen för MSVC141-verktygsuppsättningen.
- Vad gör 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 följt av din lösningsfil, som .
- Vad är syftet med 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 för att byta namn på filer baserat på byggversionen.
- Varför inkludera 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.
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.