Решение проблем MSVC141 в действиях GitHub
Мы работаем над проектом Visual Studio 2019, который недавно начал выдавать исключения, связанные с отсутствующими файлами, в частности «atlbase.h». Эта проблема, по-видимому, связана с отсутствием набора инструментов MSVC141, который не требовался еще несколько месяцев назад.
В этой статье мы расскажем вам, как обновить сценарии .yml в GitHub Actions, включив в них набор инструментов MSVC141. Это обеспечивает плавную сборку проекта и позволяет избежать ошибки «невозможно открыть включаемый файл», помогая поддерживать продуктивность рабочего процесса разработки.
Команда | Описание |
---|---|
uses: microsoft/setup-msbuild@v1.1 | Настраивает MSBuild для действий GitHub, позволяя создавать проекты .NET. |
vs-version: 2019 | Указывает используемую версию Visual Studio, обеспечивая совместимость с набором инструментов MSVC141. |
msbuild-version: 16.x | Определяет версию MSBuild в соответствии с необходимым набором инструментов MSVC141 для компиляции. |
extenda/actions/setup-nuget-sources@v0 | Настраивает источники NuGet в действиях GitHub, необходимые для восстановления зависимостей проекта. |
nuget restore POS.sln | Восстанавливает пакеты NuGet для указанного решения, разрешая все зависимости перед сборкой. |
Copy-Item | Копирует файлы из одного места в другое в PowerShell, используемом здесь для обработки шаблонов баз данных. |
Start-Process | Запускает новый процесс в PowerShell, полезный для запуска установщиков или других исполняемых файлов. |
vswhere.exe | Утилита для поиска установок Visual Studio, используемая для проверки наличия MSVC141. |
Интеграция набора инструментов MSVC141 в действия GitHub
Приведенные выше сценарии гарантируют, что набор инструментов 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.
Действия GitHub Конфигурация YAML
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
Скрипт 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
Поддержание совместимости с различными наборами инструментов в среде непрерывной интеграции (CI), такой как GitHub Actions, имеет решающее значение для обеспечения согласованности сборок и минимизации ошибок. Одним из ключевых аспектов является обновление файлов конфигурации с помощью необходимых инструментов и зависимостей. В случае MSVC141 важно понимать, что этот набор инструментов необходим для определенных проектов, особенно тех, которые используют старые библиотеки и компоненты C++.
Включение набора инструментов MSVC141 в настройку GitHub Actions предполагает не только указание правильной версии Visual Studio, но и обеспечение разрешения всех зависимостей. Это включает в себя правильную настройку источников NuGet и использование таких утилит, как vswhere.exe для проверки установок. Автоматизация этих шагов в вашем .yml и сценарии PowerShell помогают предотвратить сбои сборки и обеспечивают бесперебойную работу конвейера CI/CD, что в конечном итоге экономит время и ресурсы разработки.
Общие вопросы и решения по интеграции наборов инструментов MSVC
- Как указать версию Visual Studio в действиях GitHub?
- Использовать 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?
- Используйте команду 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, обеспечивая более плавную и надежную сборку проектов.