Вирішення проблем 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 - Windowson:pull_request:paths-ignore:- 'Engine/Engine.Android/'- 'Mobile/'jobs:build:runs-on: windows-2022defaults:run:shell: pwshenv:DEFAULT_VERSION: v17.4.500SolutionDir: ${{ github.workspace }}steps:- name: Checkoutuses: actions/checkout@v3with:token: ${{ secrets.RS_GITHUB_TOKEN }}submodules: true- uses: actions/setup-java@v4with:distribution: 'temurin'java-version: '11'- name: Setup MSBuilduses: microsoft/setup-msbuild@v1.1- name: Install Visual Studiouses: microsoft/setup-msbuild@v1.1with:vs-version: 2019msbuild-version: 16.x- name: Setup NuGet sourcesuses: extenda/actions/setup-nuget-sources@v0with:config-file: NuGet.Configsources: |[{"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 packagesrun: nuget restore POS.sln- name: Determine versionid: verrun: .\Build\determine-version.ps1- name: Update assembliesrun: .\Build\update-assemblies.ps1 ${{ steps.ver.outputs.version }} ${{ steps.ver.outputs.full-version }}- name: Generate database templaterun: |.\Common\Database\AppVeyor\gen-databases.ps1 Common\Database abcDbCopy-Item abcDb\Template.db -Destination Common\Database- name: Build solutionrun: msbuild POS.sln @Build\WindowsBuildParams.rsp- name: Build installation packagesrun: |.\Build\exit-on-failure.ps1msbuild Installation\Installation.sln @Build\WindowsBuildParams.rsp -p:BuildNumber=${{ steps.ver.outputs.full-version }}ExitOnFailureGet-ChildItem Installation\Bin\ReleaseRename-Item -Path Installation\Bin\Release\abc.msi -NewName abc-v${{ steps.ver.outputs.full-version }}.msiRename-Item -Path Installation\Bin\Release\abc.exe -NewName abc-v${{ steps.ver.outputs.full-version }}.exeRename-Item -Path Installation\Bin\Release\VRRSSurfaceComponentsEditor.msi -NewName SurfaceComponentsEditor-v${{ steps.ver.outputs.full-version }}.msi- name: Generate customization packagerun: .\Common\Database\AppVeyor\gen-customization-zip.ps1 Common\Database ${{ steps.ver.outputs.full-version }}- name: Save abc Installeruses: actions/upload-artifact@v3with:name: abcInstaller-v${{ steps.ver.outputs.full-version }}path: Installation\Bin\Release\abc-*.msi- name: Save abc Setupuses: actions/upload-artifact@v3with:name: abcSetup-v${{ steps.ver.outputs.full-version }}path: Installation\Bin\Release\abc-*.exe- name: Save Databaseuses: actions/upload-artifact@v3with: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 installationPathif (-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" -Waitif ($?) {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, забезпечуючи плавнішу та надійнішу збірку проектів.