Guia para atualizar scripts .yml para MSVC141 no GitHub

Guia para atualizar scripts .yml para MSVC141 no GitHub
Guia para atualizar scripts .yml para MSVC141 no GitHub

Resolvendo problemas de MSVC141 em ações do GitHub

Estamos trabalhando em um projeto do Visual Studio 2019 que recentemente começou a lançar exceções relacionadas a arquivos ausentes, especificamente 'atlbase.h'. Este problema parece ser devido à ausência do conjunto de ferramentas MSVC141, que não era necessário até alguns meses atrás.

Neste artigo, orientaremos você sobre como atualizar seus scripts .yml no GitHub Actions para incluir o conjunto de ferramentas MSVC141. Isso garante a construção tranquila do projeto e evita o erro 'não é possível abrir o arquivo incluído', ajudando você a manter a produtividade em seu fluxo de trabalho de desenvolvimento.

Comando Descrição
uses: microsoft/setup-msbuild@v1.1 Configura o MSBuild para GitHub Actions, permitindo a construção de projetos .NET.
vs-version: 2019 Especifica a versão do Visual Studio a ser usada, garantindo a compatibilidade com o conjunto de ferramentas MSVC141.
msbuild-version: 16.x Define a versão do MSBuild, alinhando-se com o conjunto de ferramentas MSVC141 necessário para compilação.
extenda/actions/setup-nuget-sources@v0 Configura fontes NuGet em GitHub Actions, essenciais para restaurar dependências do projeto.
nuget restore POS.sln Restaura pacotes NuGet para a solução especificada, resolvendo todas as dependências antes da compilação.
Copy-Item Copia arquivos de um local para outro no PowerShell, usado aqui para lidar com modelos de banco de dados.
Start-Process Inicia um novo processo no PowerShell, útil para executar instaladores ou outros executáveis.
vswhere.exe Um utilitário para localizar instalações do Visual Studio, usado para verificar a presença do MSVC141.

Integrando o conjunto de ferramentas MSVC141 em ações do GitHub

Os scripts fornecidos acima garantem que o conjunto de ferramentas MSVC141 esteja incluído no fluxo de trabalho do GitHub Actions. O primeiro script atualiza o arquivo de configuração YAML para incluir as etapas necessárias para configurar as ferramentas e os ambientes necessários. Isso inclui configurar o MSBuild usando microsoft/setup-msbuild@v1.1, especificando a versão do Visual Studio com vs-version: 2019, e garantindo que o msbuild-version: 16.x é usado. Estas etapas garantem que o ambiente de compilação esteja configurado corretamente para usar MSVC141.

Além disso, o script do PowerShell verifica a presença do conjunto de ferramentas MSVC141 usando vswhere.exe. Se não for encontrado, o script inicia o processo de instalação executando Start-Process com os argumentos necessários para instalar os componentes ausentes. Esta abordagem automatizada garante que o conjunto de ferramentas necessário esteja disponível, evitando o fatal error C1083 relacionado à falta de arquivos include como 'atlbase.h'. Seguindo essas etapas, você pode manter um processo de build estável e consistente para seus projetos do Visual Studio 2019 no GitHub Actions.

Atualize o script .yml para incluir o conjunto de ferramentas MSVC141

Configuração YAML de ações do 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\*

Garanta o conjunto de ferramentas MSVC correto nas ações do GitHub

Script do PowerShell para verificação e instalação do 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

Garantindo compatibilidade com conjuntos de ferramentas MSVC em ações do GitHub

Manter a compatibilidade com vários conjuntos de ferramentas em um ambiente de integração contínua (CI), como GitHub Actions, é crucial para garantir compilações consistentes e minimizar erros. Um aspecto importante é manter seus arquivos de configuração atualizados com as ferramentas e dependências necessárias. No caso do MSVC141, é importante entender que esse conjunto de ferramentas é essencial para determinados projetos, especialmente aqueles que dependem de bibliotecas e componentes C++ mais antigos.

Incluir o conjunto de ferramentas MSVC141 na configuração do GitHub Actions envolve não apenas especificar a versão correta do Visual Studio, mas também garantir que todas as dependências sejam resolvidas. Isso inclui configurar fontes NuGet corretamente e usar utilitários como vswhere.exe para verificar as instalações. Automatizando essas etapas em seu .yml e os scripts do PowerShell ajudam a evitar falhas de compilação e mantêm seu pipeline de CI/CD funcionando perfeitamente, economizando tempo e recursos de desenvolvimento.

Perguntas comuns e soluções para integração de conjuntos de ferramentas MSVC

  1. Como especifico a versão do Visual Studio em GitHub Actions?
  2. Usar vs-version: 2019 na tua .yml configuração para definir a versão desejada do Visual Studio.
  3. O que é vswhere.exe e por que é usado?
  4. vswhere.exe é um utilitário para localizar instalações do Visual Studio, garantindo que os conjuntos de ferramentas necessários estejam disponíveis.
  5. Como posso automatizar a instalação de componentes ausentes?
  6. Usar Start-Process no PowerShell para executar o instalador com os argumentos necessários para instalações autônomas.
  7. Por que é importante configurar fontes NuGet?
  8. A configuração de fontes do NuGet garante que todas as dependências do projeto sejam resolvidas, o que é crucial para compilações bem-sucedidas.
  9. Como verifico a presença do conjunto de ferramentas MSVC141?
  10. Usar vswhere.exe em um script para verificar o caminho de instalação do conjunto de ferramentas MSVC141.
  11. O que msbuild-version: 16.x especificamos?
  12. Especifica a versão do MSBuild a ser usada, garantindo compatibilidade com o conjunto de ferramentas MSVC141.
  13. Como restauro pacotes NuGet em GitHub Actions?
  14. Use o comando nuget restore seguido pelo seu arquivo de solução, como nuget restore POS.sln.
  15. Qual é o propósito do Setup MSBuild Ação?
  16. Ele configura o ambiente para usar o MSBuild, necessário para construir projetos .NET em GitHub Actions.
  17. Como posso renomear artefatos de construção automaticamente?
  18. Use comandos do PowerShell como Rename-Item para renomear arquivos com base na versão de compilação.
  19. Por que incluir distribution: 'temurin' na configuração do Java?
  20. Isso especifica a distribuição JDK a ser usada, garantindo que a versão correta do Java esteja instalada para o seu projeto.

Considerações finais sobre a integração do MSVC141

Garantir que o conjunto de ferramentas MSVC141 esteja incluído no fluxo de trabalho do GitHub Actions é essencial para manter a estabilidade e a funcionalidade dos seus projetos do Visual Studio 2019. Ao atualizar seus scripts .yml e automatizar o processo de instalação, você pode evitar erros comuns de compilação relacionados a arquivos ausentes. Essa abordagem proativa não apenas economiza tempo, mas também aumenta a eficiência do seu pipeline de CI/CD, permitindo construções de projetos mais suaves e confiáveis.