У меня есть проект, работающий со сборками как на 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 }}"
Если это помогает, моя установка сообщества VS2022 имеет папку «C:\Program Files\Microsoft Visual Studio\2022\Community\Msbuild\Microsoft\VisualStudio\v17.0\ArchitectureTools\Microsoft.VisualStudio.TeamArchitect. ModelingProject.targets», и установщик VS показывает, что у меня установлен дополнительный «Modeling SDK».
@KevinLu-MSFT Локально я использую 2022. Я добавил определения сборки к основному тексту.
@JonathanDodds, это имеет смысл, но я не думаю, что смогу указать Devops или GitHub установить эти пакеты, если только я не могу добавить что-то в определение сборки, которое контролирует это
Похоже, это ваша проблема: Поддержка редакции инструментов архитектуры и моделирования
@JasonCoyne Используете ли вы агенты, размещенные Microsoft? Просматривали ли вы описание образа виртуальной машины, чтобы узнать, какое программное обеспечение (и редакция) присутствует в образе?
@JasonCoyne Причина проблемы в том, что компонент Visual Studio: Проверка зависимостей (содержит Microsoft.VisualStudio.TeamArchitect.ModelingProject.targets) не предварительно установлен на всех агентах, размещенных Microsoft. Я поделился шагами в ответе, чтобы поделиться шагами по установке компонента в агенте, размещенном на MS. Вы также можете рассмотреть возможность использования локального агента для запуска конвейера, это сократит время работы конвейера.
В примере 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? (из-за противоречивых корпоративных и клиентских требований нам приходится использовать оба)
@JasonCoyne Я не очень знаком с действием GitHub. Но я думаю, что вы можете добавить аналогичные шаги в GitHub для установки компонента vs, поскольку github и конвейер Azure используют один и тот же образ агента.
@JasonCoyne Есть ли какие-нибудь новости об этом билете? Могу ли я узнать, подойдет ли вам ответ в Azure Pipleine?
Кажется, что в DevOps он работает корректно, хотя и значительно замедляет процесс. Если у вас есть связи, я бы предложил добавить этот пакет в изображения. К сожалению, я не могу объединить эту ветку, пока не выясню эквивалентные шаги в github, но прогресс!
@JasonCoyne github.com/actions/runner-images/issues Вы можете добавить свое требование на этом сайте. Изображение, используемое конвейером Azure и действием GitHub, будет собирать отзывы через этот сайт.
Какова версия Visual Studio на вашем локальном компьютере? Можете ли вы поделиться некоторыми подробностями об определении конвейера Azure или сборки GitHub?