Azure Devops — YAML — не читает версию .net из файла реквизита

У меня есть файл .net\cs proj, который использует общий файл реквизита. Все работает, собирается и запускается в VS2022 и Rider.

Пример моего файла csporj здесь.

    <Project Sdk = "Microsoft.NET.Sdk">
        <Import Project = "$(SolutionDir)/Archetypes/TestArchetype.props" />
    
        <PropertyGroup>
            <ImplicitUsings>enable</ImplicitUsings>
            <Nullable>enable</Nullable>
    
            <IsPackable>false</IsPackable>
            <IsTestProject>true</IsTestProject>
        </PropertyGroup>
    
        <ItemGroup>
            <ProjectReference Include = "..\..\..\Shared\xxx.Tests.Shared\xxx.Tests.Shared.csproj" />
            <ProjectReference Include = "..\xxx.Admin.Api\xxx.Admin.Api.csproj" />
        </ItemGroup>
    
    </Project>

Файл реквизита, который я пытаюсь использовать,

    <?xml version = "1.0" encoding = "utf-8"?>
    <Project>
        <PropertyGroup>
            <TargetFramework Condition = "'$(TargetFramework)' == ''">net8.0</TargetFramework>
        </PropertyGroup>
    
        <ItemGroup>
            <PackageReference Include = "Microsoft.AspNetCore.TestHost" Version = "6.0.0" />
            <PackageReference Include = "Microsoft.NET.Test.Sdk" Version = "17.9.0" />
            <PackageReference Include = "Moq" Version = "4.18.4" />
            <PackageReference Include = "MSTest.TestAdapter" Version = "3.0.2" />
            <PackageReference Include = "MSTest.TestFramework" Version = "3.0.2" />
            <PackageReference Include = "coverlet.collector" Version = "3.2.0" />
            <PackageReference Include = "Shouldly" Version = "4.2.1" />
        </ItemGroup>
    </Project>

Задача, с которой это не удается, - это тесты

    jobs:
    - job: APIGatewayBuild
        displayName: Build API Gateway
        pool: Default
        steps:
        - task: UseDotNet@2
            displayName: "Install .NET 8 SDK"
            inputs:
            packageType: "sdk"
            version: "8.x"
            installationPath: $(Agent.ToolsDirectory)/dotnet
    
        - task: DotNetCoreCLI@2
            displayName: "Run unit tests"
            inputs:
            command: "test"
            arguments: '-c $(BuildConfiguration) --filter TestCategory!~Integration -property:NoWarn = "1701%3B1702%3B1591"'
            projects: |
                ApiGateway/**/*.Tests.csproj
                Shared/**/*.Tests.csproj

Конвейер доходит до шага тестирования и затем выдает эту ошибку

API Gateway - Build Run unit tests

View raw log Starting: Run unit tests
==============================================================================
 Task         : .NET Core Description  : Build, test, package, or
publish a dotnet application, or run a custom dotnet command Version  
: 2.240.0 Author       : Microsoft Corporation Help         :
https://docs.microsoft.com/azure/devops/pipelines/tasks/build/dotnet-core-cli
==============================================================================
 C:\WINDOWS\system32\chcp.com 65001 Active code page: 65001 Info: .NET
Core SDK/runtime 2.2 and 3.0 are now End of Life(EOL) and have been
removed from all hosted agents. If you're using these SDK/runtimes on
hosted agents, kindly upgrade to newer versions which are not EOL, or
else use UseDotNet task to install the required version.
D:\DevOpsAgents\yyy\_tool\dotnet\dotnet.exe test
D:\DevOpsAgents\yyy\1016\s\ApiGateway\Api\Consumer.HooksApi.Tests\Consumer.Hooks.Api.Tests.csproj
> --logger trx --results-directory D:\DevOpsAgents\yyy\_temp -c Release --filter TestCategory!~Integration -property:NoWarn=1701%3B1702%3B1591   Determining projects to restore...
D:\DevOpsAgents\yyy\_tool\dotnet\sdk\8.0.302\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.TargetFrameworkInference.targets(96,5):
error NETSDK1013: The TargetFramework value '' was not recognized. It
may be misspelled. If not, then the TargetFrameworkIdentifier and/or
TargetFrameworkVersion properties must be specified explicitly.
[D:\DevOpsAgents\yyy\1016\s\ApiGateway\Api\Consumer.HooksApi.Tests\Consumer.Hooks.Api.Tests.csproj]
##[error]Error: The process 'D:\DevOpsAgents\yyy\_tool\dotnet\dotnet.exe' failed with exit code 1
D:\DevOpsAgents\yyy\_tool\dotnet\dotnet.exe test
D:\DevOpsAgents\yyy\1016\s\ApiGateway\Api\xxx.Admin.Api.Tests\xxx.Admin.Api.Tests.csproj
--logger trx --results-directory D:\DevOpsAgents\yyy\_temp -c Release --filter TestCategory!~Integration -property:NoWarn=1701%3B1702%3B1591   Determining projects to restore...

Я был бы признателен, если бы понял, где я ошибаюсь, поскольку на самом деле я не хочу отказываться от архетипов, потому что у меня есть решение из 82 проектов, и его было сложно обновить из-за большого количества ошибок обнаружения понижения.

Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Не следует указывать свойство TargetFramework с помощью файла MSBuild .props, так как это свойство влияет на восстановление и будет автоматически исключено. См. «Руководство по содержанию реквизитов и целей MSBuild».

Вы можете указать свойство TargetFramework в проекте любым из следующих способов:

  1. Укажите непосредственно в файле проекта (например, myproject.csproj).

    <Project Sdk = "Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        . . .
      </PropertyGroup>
    
    </Project>
    
    
  2. Добавьте аргумент MSBuild «-p:TargetFramework=net8.0» в команду dotnet, чтобы указать TargetFramework, или перезапишите тот, который указан в файле проекта.

     jobs:
     - job: APIGatewayBuild
         displayName: Build API Gateway
         pool: Default
         steps:
         - task: UseDotNet@2
             displayName: "Install .NET 8 SDK"
             inputs:
             packageType: "sdk"
             version: "8.x"
             installationPath: $(Agent.ToolsDirectory)/dotnet
    
         - task: DotNetCoreCLI@2
             displayName: "Run unit tests"
             inputs:
             command: "test"
             arguments: '-c $(BuildConfiguration) --filter TestCategory!~Integration -p:NoWarn = "1701%3B1702%3B1591";TargetFramework=net8.0'
             projects: |
                 ApiGateway/**/*.Tests.csproj
                 Shared/**/*.Tests.csproj
    

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

Simon Price 01.07.2024 09:42

@SimonPrice, нет проблем. Пожалуйста продолжай.

Bright Ran-MSFT 01.07.2024 09:49

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

Simon Price 01.07.2024 10:06

@SimonPrice, как указано в документации, свойство TargetFramework может повлиять на восстановление и будет автоматически исключено. Возможно, это основная причина.

Bright Ran-MSFT 01.07.2024 10:17

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

Как указать версию Chromium драматурга в конвейере Azure
Попытка получить все PR из «branch/*» с помощью Rest API
Как запустить весь конвейер Azure, от начала до конца, внутри контейнера Docker?
Как добавить встроенное изображение в описание или комментарий рабочего элемента Azure Devops с помощью WorkItemTrackingHttpClient?
Azure – RBAC для группы управления
Как назначить разрешения на уровне организации для создания репозиториев во всех проектах организации в Azure DevOps?
Развертывание веб-приложения Python (Dash) в Azure, конвейер работает слишком долго, а колесо создания сообщений для панд все еще работает. Как оптимизировать?
Нет кнопки «Импортировать конвейер» в Azure DevOps
Не удалось войти в систему для пользователя «<участник, идентифицированный токеном>» при авторизации на SQL Server через субъект-службу из назначенной группы AAD
Доступ к артефактам конвейера Azure DevOps из другой организации