NU1100: невозможно разрешить 'System.Reflection.TypeExtensions (> = 4.5.1) "для .NETStandard, версия = v1.3" - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь перенести мой маленький проект OSS из AppVeyor в Azure DevOps и получил почти все, но теперь получает эту ошибку на шаге dotnet restore:

NU1100: не удалось разрешить 'System.Reflection.TypeExtensions (> = 4.5.1)' для .NETStandard, версия = v1.3 '.

Несмотря на то, что я ясно вижучто System.Reflection.TypeExtensions поддерживает .NET Standard 1.3:

.NETStandard 1.3
    System.Reflection (>= 4.3.0)
    System.Resources.ResourceManager (>= 4.3.0)
    System.Runtime (>= 4.3.0)

Что я делаю не так?

Обновление: мой файл YAML выглядит следующим образом:

trigger:
- master

pool:
  vmImage: 'windows-2019'

variables:
  solution: 'JWT.sln'
  buildConfiguration: 'Release'
  buildPlatform: 'Any CPU'
  dotNetVersion: '2.2.106'

steps:
- task: DotNetCoreInstaller@0
  displayName: Install .NET Core v$(dotNetVersion)
  inputs:
      version: $(dotNetVersion)

- task: DotNetCoreCLI@2
  displayName: 'Restore NuGet packages'
  inputs:
    command: 'restore'
    projects: '**/*.csproj'
    feedsToUse: config
    nugetConfigPath: NuGet.config

- task: DotNetCoreCLI@2
  displayName: 'Build solution'
  inputs:
    command: 'build'
    projects: '$(solution)'
    configuration: '$(buildConfiguration)'

- task: DotNetCoreCLI@2
  displayName: Run .NET Core tests
  inputs:
    command: 'test'
    projects: 'tests/**/JWT.Tests.Core.csproj'
    arguments: ' -c $(buildConfiguration) --no-build --no-restore'
    testRunner: VSTest
    testResultsFiles: '**/*.trx'
    testResultsFormat: 'xUnit'
    failTaskOnFailedTests: true

- task: DotNetCoreCLI@2
  displayName: Run .NET Framework tests
  inputs:
    command: 'test'
    projects: 'tests/**/JWT.Tests.NetFramework.csproj'
    arguments: ' -c $(buildConfiguration) --no-build --no-restore'
    testRunner: VSTest
    testResultsFiles: '**/*.trx'
    testResultsFormat: 'xUnit'
    failTaskOnFailedTests: true

- task: DotNetCoreCLI@2
  displayName: Package NuGet package
  inputs:
    command: pack
    packagesToPack: 'src/**/*.csproj'
    configuration: $(BuildConfiguration)
    nobuild: true

- task: PublishBuildArtifacts@1
  displayName: Publish build artifacts

Обновление 2: Я пытался восстановить пакеты для .NET Core и .NET Framework отдельно, но это не сработало:

  displayName: 'Restore NuGet packages for .NET Core'
  inputs:
    command: 'restore'
    projects: '**/*.csproj'
    feedsToUse: config
    nugetConfigPath: NuGet.config

- task: NuGetCommand@2
  displayName: 'Restore NuGet packages for .NET Framework'
  inputs:
    command: 'restore'
    restoreSolution: $(solution)
    feedsToUse: config
    nugetConfigPath: NuGet.config

- task: DotNetCoreCLI@2
  displayName: 'Build solution'
  inputs:
    command: 'build'
    projects: '$(solution)'
    configuration: '$(buildConfiguration)'

Что работает, хотя это сырой MSBuild, который явно восстанавливает пакеты:

- task: MSBuild@1
  displayName: Build solution
  inputs:
    solution: $(solution)   
    msbuildArguments: /restore /t:build /p:CreatePackage=true /p:NoPackageAnalysis=true /p:PackageOutputPath=$(Build.ArtifactStagingDirectory)\artifacts
    configuration: $(BuildConfiguration)
    maximumCpuCount: true

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Вот я и закончил работая :

trigger:
- master

pool:
  vmImage: 'windows-2019'

variables:
  solution: 'JWT.sln'
  buildConfiguration: 'Release'
  buildPlatform: 'Any CPU'
  coreVersion: '2.2.106'
  nugetVersion: '4.9.4'

steps:
- task: DotNetCoreInstaller@0
  displayName: Install .NET Core v$(coreVersion)
  inputs:
      version: $(coreVersion)

- task: DotNetCoreCLI@2
  displayName: 'Restore NuGet packages for .NET Core'
  inputs:
    command: 'restore'
    projects: '**/*.csproj'

- task: NuGetToolInstaller@0
  displayName: Install NuGet v$(nugetVersion)
  inputs:
    versionSpec: $(nugetVersion)
    checkLatest: true

- task: NuGetCommand@2
  displayName: 'Restore NuGet packages for .NET Framework'
  inputs:
    command: 'restore'
    restoreSolution: $(solution)

- task: DotNetCoreCLI@2
  displayName: 'Build solution'
  inputs:
    command: 'build'
    projects: '$(solution)'
    arguments: '-c $(buildConfiguration)'

- task: DotNetCoreCLI@2
  displayName: Run .NET Core tests
  inputs:
    command: 'test'
    projects: 'tests/**/JWT.Tests.Core.csproj'
    arguments: ' -c $(buildConfiguration) --no-build --no-restore'
    testRunner: VSTest
    testResultsFiles: '**/*.trx'
    testResultsFormat: 'xUnit'
    failTaskOnFailedTests: true

- task: DotNetCoreCLI@2
  displayName: Run .NET Framework tests
  inputs:
    command: 'test'
    projects: 'tests/**/JWT.Tests.NetFramework.csproj'
    arguments: ' -c $(buildConfiguration) --no-build --no-restore'
    testRunner: VSTest
    testResultsFiles: '**/*.trx'
    testResultsFormat: 'xUnit'
    failTaskOnFailedTests: true

- task: DotNetCoreCLI@2
  displayName: Package NuGet package
  inputs:
    command: pack
    packagesToPack: 'src/**/*.csproj'
    configuration: $(BuildConfiguration)
    nobuild: true

- task: PublishBuildArtifacts@1
  displayName: Publish build artifacts
0 голосов
/ 08 мая 2019

Я думаю, что ваша задача восстановления dotnet не восстановление dotnet, а каким-то образом восстановление msbuild / NuGet?

В частности, из последних 20 строк журнала я предполагаю, чтоэта ошибка не имеет ничего общего с этим пакетом, просто этот пакет был самым первым, который он пытался восстановить, так что именно здесь он допустил ошибку, и реальная проблема - это скорее вариант https://github.com/NuGet/Home/issues/4821.

Шаг диагностики 1 : измените контейнер агента сборки на один без Visual Studio и посмотрите, исправит ли это ошибку восстановления.

Я, конечно, уверен, что (1)шаг восстановления избыточен для основной цепочки инструментов dotnet, и (2) вы должны использовать базовую цепочку инструментов dotnet для сборки на своих рабочих столах разработчиков?

Так что я думаю, что проблемы при переходе на Azure могут быть: (1)неясно, как построить правильный конвейер, и (2) могут быть некоторые ошибки во взаимодействиях dotnet core / msbuild / nuget.

  • Если вы используете параметры графического интерфейса, то только задач, которые вы хотите: dotnet core задач
  • Если вы используете опцию YML, начните с выбора только фрагментов, извлеченных из https://docs.microsoft.com/en-us/azure/devops/pipelines/languages/dotnet-core. фрагментов наэта страница эквивалентна выполнению команд dotnet на локальном компьютере, поэтому ее можно отладить на локальном компьютере.
...