GitHub アクションでの MSVC141 問題の解決
私たちは Visual Studio 2019 プロジェクトに取り組んでいますが、最近、不足しているファイル、特に 'atlbase.h' に関連する例外がスローされ始めました。この問題は、数か月前までは必要なかった MSVC141 ツールセットが存在しないことが原因であるようです。
この記事では、GitHub Actions の .yml スクリプトを更新して MSVC141 ツールセットを含める方法を説明します。これにより、プロジェクトのビルドがスムーズに行われ、「インクルード ファイルを開けません」エラーが回避され、開発ワークフローの生産性を維持できます。
| 指示 | 説明 |
|---|---|
| uses: microsoft/setup-msbuild@v1.1 | GitHub Actions 用に MSBuild をセットアップし、.NET プロジェクトの構築を可能にします。 |
| vs-version: 2019 | 使用する Visual Studio のバージョンを指定し、MSVC141 ツールセットとの互換性を確保します。 |
| msbuild-version: 16.x | コンパイルに必要な MSVC141 ツールセットに合わせて、MSBuild バージョンを定義します。 |
| extenda/actions/setup-nuget-sources@v0 | GitHub Actions で NuGet ソースを構成します。これは、プロジェクトの依存関係を復元するために不可欠です。 |
| 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」などのインクルード ファイルが欠落していることに関連します。これらの手順に従うことで、GitHub Actions で Visual Studio 2019 プロジェクトの安定した一貫したビルド プロセスを維持できます。
MSVC141 ツールセットを含めるように .yml スクリプトを更新する
GitHub アクションの YAML 構成
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\*
GitHub アクションで正しい MSVC ツールセットを確認する
MSVC141 を確認してインストールするための PowerShell スクリプト
$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
GitHub アクションでの MSVC ツールセットとの互換性の確保
GitHub Actions のような継続的インテグレーション (CI) 環境でさまざまなツールセットとの互換性を維持することは、ビルドの一貫性を確保し、エラーを最小限に抑えるために重要です。重要な側面の 1 つは、必要なツールと依存関係を使用して構成ファイルを最新の状態に保つことです。 MSVC141 の場合、このツールセットは特定のプロジェクト、特に古い C++ ライブラリやコンポーネントに依存するプロジェクトには不可欠であることを理解することが重要です。
GitHub Actions セットアップに MSVC141 ツールセットを含めるには、正しい Visual Studio バージョンを指定するだけでなく、すべての依存関係が確実に解決されるようにする必要があります。これには、NuGet ソースを正しく構成することと、次のようなユーティリティを使用することが含まれます。 vswhere.exe インストールを確認します。これらのステップを社内で自動化すると、 .yml PowerShell スクリプトは、ビルドの失敗を防止し、CI/CD パイプラインのスムーズな実行を維持するのに役立ち、最終的には開発時間とリソースを節約します。
MSVC ツールセットの統合に関する一般的な質問と解決策
- GitHub Actions で Visual Studio のバージョンを指定するにはどうすればよいですか?
- 使用 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 ツールセットとの互換性を確保します。
- GitHub Actions で NuGet パッケージを復元するにはどうすればよいですか?
- コマンドを使用する nuget restore 続いてソリューション ファイルが続きます。 nuget restore POS.sln。
- の目的は何ですか Setup MSBuild アクション?
- GitHub Actions で .NET プロジェクトをビルドするために必要な MSBuild を使用する環境を構成します。
- ビルド アーティファクトの名前を自動的に変更するにはどうすればよいですか?
- 次のような PowerShell コマンドを使用します Rename-Item ビルド バージョンに基づいてファイルの名前を変更します。
- なぜ含めるのか distribution: 'temurin' Javaのセットアップで?
- これにより、使用する JDK ディストリビューションが指定され、プロジェクトに正しい Java バージョンがインストールされるようになります。
MSVC141 の統合に関する最終的な考え
MSVC141 ツールセットが GitHub Actions ワークフローに含まれていることを確認することは、Visual Studio 2019 プロジェクトの安定性と機能を維持するために不可欠です。 .yml スクリプトを更新し、インストール プロセスを自動化することで、ファイルの欠落に関連する一般的なビルド エラーを防ぐことができます。このプロアクティブなアプローチにより、時間が節約されるだけでなく、CI/CD パイプラインの効率も向上し、よりスムーズで信頼性の高いプロジェクトのビルドが可能になります。