Вирішення проблем MSVC141 у GitHub Actions
Ми працюємо над проектом Visual Studio 2019, який нещодавно почав створювати винятки, пов’язані з відсутніми файлами, зокрема «atlbase.h». Схоже, ця проблема пов’язана з відсутністю набору інструментів MSVC141, який не був потрібний ще кілька місяців тому.
У цій статті ми розповімо вам, як оновити ваші сценарії .yml у GitHub Actions, щоб включити набір інструментів MSVC141. Це забезпечує плавну збірку проекту та уникає помилки «неможливо відкрити включений файл», допомагаючи підтримувати продуктивність робочого процесу розробки.
Команда | опис |
---|---|
uses: microsoft/setup-msbuild@v1.1 | Налаштовує MSBuild for GitHub Actions, що дозволяє створювати проекти .NET. |
vs-version: 2019 | Визначає версію Visual Studio для використання, забезпечуючи сумісність із набором інструментів MSVC141. |
msbuild-version: 16.x | Визначає версію MSBuild, узгоджену з необхідним набором інструментів MSVC141 для компіляції. |
extenda/actions/setup-nuget-sources@v0 | Налаштовує джерела NuGet у GitHub Actions, необхідні для відновлення залежностей проекту. |
nuget restore POS.sln | Відновлює пакети NuGet для вказаного рішення, усуваючи всі залежності перед збіркою. |
Copy-Item | Копіює файли з одного місця в інше в PowerShell, використовується тут для обробки шаблонів бази даних. |
Start-Process | Запускає новий процес у PowerShell, корисний для запуску інсталяторів або інших виконуваних файлів. |
vswhere.exe | Утиліта для пошуку інсталяцій Visual Studio, яка використовується для перевірки наявності MSVC141. |
Інтеграція набору інструментів MSVC141 у GitHub Actions
Сценарії, надані вище, гарантують, що набір інструментів MSVC141 включено у ваш робочий процес GitHub Actions. Перший сценарій оновлює файл конфігурації YAML, щоб включити кроки, необхідні для налаштування необхідних інструментів і середовищ. Це включає налаштування MSBuild за допомогою microsoft/setup-msbuild@v1.1, вказавши версію Visual Studio за допомогою vs-version: 2019, а також забезпечення того, щоб msbuild-version: 16.x використовується. Ці дії гарантують, що середовище збірки правильно налаштовано для використання MSVC141.
Крім того, сценарій PowerShell перевіряє наявність набору інструментів MSVC141 за допомогою vswhere.exe. Якщо його не знайдено, скрипт запускає процес інсталяції Start-Process з необхідними аргументами для встановлення відсутніх компонентів. Цей автоматизований підхід гарантує, що необхідний набір інструментів доступний, запобігаючи fatal error C1083 пов’язані з відсутніми файлами включають, як-от «atlbase.h». Виконуючи ці кроки, ви зможете підтримувати стабільний і послідовний процес збірки своїх проектів Visual Studio 2019 у GitHub Actions.
Оновіть сценарій .yml, щоб включити набір інструментів MSVC141
Конфігурація YAML дій GitHub
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\*
Переконайтеся, що правильний набір інструментів MSVC у GitHub Actions
Сценарій PowerShell для перевірки та встановлення 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
Забезпечення сумісності з наборами інструментів MSVC у GitHub Actions
Підтримка сумісності з різними наборами інструментів у середовищі безперервної інтеграції (CI), наприклад GitHub Actions, має вирішальне значення для забезпечення узгоджених збірок і мінімізації помилок. Одним із ключових аспектів є підтримка файлів конфігурації в актуальному стані з необхідними інструментами та залежностями. У випадку MSVC141 важливо розуміти, що цей набір інструментів необхідний для певних проектів, особливо тих, які покладаються на старіші бібліотеки та компоненти C++.
Включення набору інструментів MSVC141 до ваших налаштувань GitHub Actions передбачає не лише вказівку правильної версії Visual Studio, але й забезпечення вирішення всіх залежностей. Це включає правильне налаштування джерел NuGet і використання таких утиліт, як vswhere.exe для перевірки установок. Автоматизація цих кроків у вашому .yml і сценарії PowerShell допомагають запобігти помилкам збірки та забезпечують безперебійну роботу конвеєра CI/CD, що зрештою заощаджує час і ресурси розробки.
Поширені запитання та рішення щодо інтеграції наборів інструментів MSVC
- Як мені вказати версію Visual Studio в GitHub Actions?
- використання vs-version: 2019 у вашому .yml конфігурації, щоб встановити потрібну версію Visual Studio.
- Що vswhere.exe і навіщо його використовують?
- vswhere.exe це утиліта для пошуку інсталяцій Visual Studio, яка гарантує наявність необхідних наборів інструментів.
- Як я можу автоматизувати встановлення відсутніх компонентів?
- використання Start-Process у PowerShell, щоб запустити інсталятор із необхідними аргументами для автоматичного встановлення.
- Чому важливо налаштувати джерела NuGet?
- Налаштування джерел NuGet гарантує, що всі залежності проекту вирішено, що має вирішальне значення для успішних збірок.
- Як перевірити наявність набору інструментів MSVC141?
- використання vswhere.exe у сценарії, щоб перевірити шлях встановлення набору інструментів MSVC141.
- Що робить msbuild-version: 16.x вказати?
- Він визначає версію MSBuild, яка буде використовуватися, забезпечуючи сумісність із набором інструментів MSVC141.
- Як відновити пакети NuGet у GitHub Actions?
- Використовуйте команду nuget restore а потім ваш файл рішення, наприклад nuget restore POS.sln.
- Яка мета Setup MSBuild дія?
- Він налаштовує середовище для використання MSBuild, необхідного для створення проектів .NET у GitHub Actions.
- Як я можу автоматично перейменувати артефакти збірки?
- Використовуйте такі команди PowerShell, як Rename-Item щоб перейменувати файли на основі версії складання.
- Навіщо включати distribution: 'temurin' в налаштуваннях Java?
- Це визначає дистрибутив JDK для використання, гарантуючи, що для вашого проекту встановлено правильну версію Java.
Останні думки щодо інтеграції MSVC141
Включення набору інструментів MSVC141 у ваш робочий процес GitHub Actions має важливе значення для підтримки стабільності та функціональності ваших проектів Visual Studio 2019. Оновивши сценарії .yml і автоматизувавши процес встановлення, ви можете запобігти поширеним помилкам збірки, пов’язаним із відсутніми файлами. Цей проактивний підхід не тільки економить час, але й підвищує ефективність конвеєра CI/CD, забезпечуючи плавнішу та надійнішу збірку проектів.