При сборке проекта vs2022 в github/devops, который включает графы зависимостей архитектуры, сборка завершается с ошибкой MSB4226

У меня есть проект, работающий со сборками как на GitHub, так и на Devops. Недавно я добавил диаграмму зависимостей архитектуры для https://azuredevopslabs.com/labs/devopsserver/livedependentvalidation/

Это прекрасно строится локально и правильно обеспечивает зависимости.

Однако у меня возникают сбои при сборке как в DevOps, так и в GitHub.

Интересно, что даже с ошибкой, если и есть ошибки зависимостей, они вроде бы правильно идентифицируются и предупреждаются.

Но в случае, когда ошибок зависимостей нет, ошибки сборки все равно выдаются.

И devops, и github выдают одну и ту же ошибку (см. внизу).

У меня есть nuget Microsoft.DependencyValidation.Analyzers в решении/проектах.

Я видел несколько других сообщений в разных местах с той же основной проблемой, но в более ранних версиях VS.

В ответе @duncanp, на который есть ссылка, говорится, что ModelingProject.targets является устаревшим методом и может быть удален, если вы не используете 2015 год. Но указанные строки сейчас отсутствуют в моих файлах проекта/решения, поэтому Я не могу удалить их, как предложено. Поскольку цели изначально не включены в мое решение, я не уверен, что вызывает эту ошибку (возможно, они включены неявно?)

Проект проверки зависимостей Visual Studio 2017 на сервере сборки

DependencyValidation\DependencyValidation.modelproj(66,11): Ошибка MSB4226: импортированный проект "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Microsoft\VisualStudio\v17.0\ArchitectureTools\Microsoft.VisualStudio.TeamArchitect. ModelingProject.targets» не найден. Кроме того, попытался найти «ArchitectureTools\Microsoft.VisualStudio.TeamArchitect.ModelingProject.targets» в резервных путях поиска для $(VSToolsPath) — «C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v17. 0" . Эти пути поиска определены в «C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Current\Bin\msbuild.exe.Config». Убедитесь, что путь в объявлении правильный и что файл существует на диске по одному из путей поиска.

конвейер DevOps (обрезанный до соответствующих этапов сборки) ):

parameters:
- name: solution
  default: '**/*.sln'
- name: buildPlatform
  default: 'Any CPU'
- name: buildConfiguration
  default: 'Release'

# ASP.NET
# Build and test ASP.NET projects.
# Add steps that publish symbols, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/apps/aspnet/build-aspnet-4

trigger:
  branches:
    include: 
      - master
#  paths:
#    include: 
#      - 'WIGOV.Applications.Dashboard/**'

pr: none

pool:
  vmImage: 'windows-latest'

steps:
- task: VSBuild@1
  inputs:
    solution: '${{ parameters.solution }}'
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation = "$(Build.ArtifactStagingDirectory)"'
    platform: '${{ parameters.buildPlatform }}'
    configuration: '${{ parameters.buildConfiguration }}'
    msbuildArchitecture: 'x86'

конвейер github (я также пробовал использовать последнюю версию Windows вместо Ubuntu):

# This workflow will build a .NET project
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-net

name: .NET

on:

  pull_request:
    branches: [ "master" ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4
    - name: Setup .NET
      uses: actions/setup-dotnet@v4
      with:
        dotnet-version: 8.0.x
    - name: Restore dependencies
      run: dotnet restore
    - name: Build
      run: dotnet build --no-restore
    - name: Test
      run: dotnet test --no-build --verbosity normal
    env:
      ARTIFACTORY_USERNAME: "${{ secrets.DSDWI_ARTIFACTORY_USERNAME }}"
      ARTIFACTORY_PASSWORD: "${{ secrets.DSDWI_ARTIFACTORY_PASSWORD }}"

Какова версия Visual Studio на вашем локальном компьютере? Можете ли вы поделиться некоторыми подробностями об определении конвейера Azure или сборки GitHub?

Kevin Lu-MSFT 18.04.2024 07:49

Если это помогает, моя установка сообщества VS2022 имеет папку «C:\Program Files\Microsoft Visual Studio\2022\Community\Msbuild\Microsoft\VisualStudio\v17.0\A‌​rchitectureTools\Mic‌​rosoft.VisualStudio.‌​TeamArchitect. Modeli‌​ngProject.targets», и установщик VS показывает, что у меня установлен дополнительный «Modeling SDK».

Jonathan Dodds 18.04.2024 15:37

@KevinLu-MSFT Локально я использую 2022. Я добавил определения сборки к основному тексту.

Jason Coyne 18.04.2024 15:51

@JonathanDodds, это имеет смысл, но я не думаю, что смогу указать Devops или GitHub установить эти пакеты, если только я не могу добавить что-то в определение сборки, которое контролирует это

Jason Coyne 18.04.2024 15:52

Похоже, это ваша проблема: Поддержка редакции инструментов архитектуры и моделирования

julealgon 18.04.2024 16:06

@JasonCoyne Используете ли вы агенты, размещенные Microsoft? Просматривали ли вы описание образа виртуальной машины, чтобы узнать, какое программное обеспечение (и редакция) присутствует в образе?

Jonathan Dodds 18.04.2024 21:46

@JasonCoyne Причина проблемы в том, что компонент Visual Studio: Проверка зависимостей (содержит Microsoft.VisualStudio.TeamArchitect.ModelingProject.targets‌) не предварительно установлен на всех агентах, размещенных Microsoft. Я поделился шагами в ответе, чтобы поделиться шагами по установке компонента в агенте, размещенном на MS. Вы также можете рассмотреть возможность использования локального агента для запуска конвейера, это сократит время работы конвейера.

Kevin Lu-MSFT 19.04.2024 08:50
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
7
168
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В примере YAML вы используете агенты, размещенные в Microsoft, в Azure Pipeline.

Обратитесь к этому документу о предварительно установленных компонентах Visual Studio в агентах, размещаемых Microsoft.

Компонент Visual Studio: проверка зависимостей (содержит Microsoft.VisualStudio.TeamArchitect.ModelingProject.targets) не предварительно установлен на всех агентах, размещаемых Microsoft.

Это причина проблемы.

Чтобы решить эту проблему, нам нужно добавить дополнительный скрипт для установки компонента: Microsoft.VisualStudio.ComponentGroup.ArchitectureTools.Managed в Visual Studio на агентах, размещенных Microsoft.

Обратитесь к документации по установке компонента Visual Studio: Используйте параметры командной строки для установки, обновления и управления Visual Studio

В Azure Pipeline для этого можно использовать следующий скрипт.

Например:

steps:
- powershell: |
      $source = "https://aka.ms/vs/17/release/vs_enterprise.exe"
      $destination = "$(build.sourcesdirectory)\vs_enterprise.exe"
      $client = new-object System.Net.WebClient 
      $cookie = "oraclelicense=accept-securebackup-cookie"
      $client.Headers.Add([System.Net.HttpRequestHeader]::Cookie, $cookie) 
      $client.downloadFile($source, $destination)
  displayName: 'Download vs.exe'

- script: 'vs_enterprise.exe --quiet --wait --norestart --add Microsoft.VisualStudio.ComponentGroup.ArchitectureTools.Managed'
  displayName: 'Install ArchitectureTools'

- script: ls
  workingDirectory: 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\Microsoft\VisualStudio\v17.0\ArchitectureTools'
  displayName: 'check install result'

Результат:

Затем вы можете запустить задачу VSbuild для сборки своего проекта.

Но процесс установки занимает около 6 минут, что увеличит время работы Pipeline.

Вы также можете рассмотреть возможность использования Самостоятельного агента в Azure Pipeline.

В этом случае для компиляции вашего проекта будет напрямую использоваться локальная среда без установки компонента Visual Studio.

Это очень полезно, я попробую это в ближайшее время. Есть ли у вас какая-либо помощь со стороны GitHub? (из-за противоречивых корпоративных и клиентских требований нам приходится использовать оба)

Jason Coyne 19.04.2024 15:59

@JasonCoyne Я не очень знаком с действием GitHub. Но я думаю, что вы можете добавить аналогичные шаги в GitHub для установки компонента vs, поскольку github и конвейер Azure используют один и тот же образ агента.

Kevin Lu-MSFT 19.04.2024 16:12

@JasonCoyne Есть ли какие-нибудь новости об этом билете? Могу ли я узнать, подойдет ли вам ответ в Azure Pipleine?

Kevin Lu-MSFT 25.04.2024 08:52

Кажется, что в DevOps он работает корректно, хотя и значительно замедляет процесс. Если у вас есть связи, я бы предложил добавить этот пакет в изображения. К сожалению, я не могу объединить эту ветку, пока не выясню эквивалентные шаги в github, но прогресс!

Jason Coyne 26.04.2024 20:12

@JasonCoyne github.com/actions/runner-images/issues Вы можете добавить свое требование на этом сайте. Изображение, используемое конвейером Azure и действием GitHub, будет собирать отзывы через этот сайт.

Kevin Lu-MSFT 27.04.2024 02:24

Другие вопросы по теме