Ошибка на шаге восстановления nuget в сборке azure devops после обновления до .net 5

#.net #visual-studio #azure-devops #msbuild #nuget

#.net #visual-studio #azure-devops #msbuild #nuget

Вопрос:

У меня есть конвейер сборки в azure devops, который отлично работал для net core 3.1, затем я обновил этот проект до .net 5.0, и сборка больше не работает, она останавливается на шаге восстановления nuget

введите описание изображения здесь

это журнал ошибок

  MSBuild auto-detection: using msbuild version '16.200.19.31001' from 'D:Program Files (x86)Microsoft Visual Studio2019PreviewMSBuildCurrentbin'. Use option -MSBuildVersion to force nuget to use a specific version of MSBuild.
MSBuild P2P timeout [ms]: 120000
D:Program Files (x86)Microsoft Visual Studio2019PreviewMSBuildCurrentbinmsbuild.exe "C:WindowsServiceProfilesNetworkServiceAppDataLocalTempNuGetScratchxbcsorbg.z0f.nugetinputs.targets" /t:GenerateRestoreGraphFile /nologo /nr:false /v:q /p:NuGetRestoreTargets="C:WindowsServiceProfilesNetworkServiceAppDataLocalTempNuGetScratchp0q3isxq.jbq.nugetrestore.targets" /p:RestoreUseCustomAfterTargets="True" /p:RestoreTaskAssemblyFile="C:agent_work_toolNuGet5.7.0x64nuget.exe" /p:RestoreSolutionDirectory="C:agent_work12sFramework\" /p:RestoreConfigFile="C:agent_work12NugettempNuGet_1947.config" /p:SolutionDir="C:agent_work12sFramework\" /p:SolutionName="Tenper Core"
NuGet.CommandLine.ExitCodeException: Exception of type 'NuGet.CommandLine.ExitCodeException' was thrown.
   at NuGet.CommandLine.MsBuildUtility.<GetProjectReferencesAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at NuGet.CommandLine.RestoreCommand.<GetDependencyGraphSpecAsync>d__68.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at NuGet.CommandLine.RestoreCommand.<DetermineInputsFromMSBuildAsync>d__63.MoveNext()
##[error]The nuget command failed with exit code(1) and error(C:agent_work_tooldotnetsdk5.0.100-rc.1.20452.10SdksMicrosoft.NET.SdktargetsMicrosoft.NET.TargetFrameworkInference.targets(54,5): error MSB4186: Invalid static method invocation syntax: "[MSBuild]::GetTargetFrameworkIdentifier('$(TargetFramework)')". Method '[MSBuild]::GetTargetFrameworkIdentifier' not found. Static method invocation should be of the form: $([FullTypeName]::Method()), e.g. $([System.IO.Path]::Combine(`a`, `b`)). Check that all parameters are defined, are of the correct type, and are specified in the right order. [C:agent_work12sFrameworkInterfacesInterfaces.csproj]
C:agent_work_tooldotnetsdk5.0.100-rc.1.20452.10SdksMicrosoft.NET.SdktargetsMicrosoft.NET.TargetFrameworkInference.targets(54,5): error MSB4186: Invalid static method invocation syntax: "[MSBuild]::GetTargetFrameworkIdentifier('$(TargetFramework)')". Method '[MSBuild]::GetTargetFrameworkIdentifier' not found. Static method invocation should be of the form: $([FullTypeName]::Method()), e.g. $([System.IO.Path]::Combine(`a`, `b`)). Check that all parameters are defined, are of the correct type, and are specified in the right order. [C:agent_work12sFrameworkDIDI.csproj]
  

Ответ №1:

Попробуйте использовать Use .net core task Dotnet core task с командой восстановления.

 - task: UseDotNet@2
  displayName: 'Use .NET Core sdk 5.0.100-rc.1.20452.10'
  inputs:
    packageType: 'sdk'
    version: '5.0.100-rc.1.20452.10'
    includePreviewVersions: true

- task: DotNetCoreCLI@2
  displayName: 'dotnet restore'
  inputs:
    command: restore
    projects: '**/*.csproj'
  

Настоятельно рекомендуется использовать dotnet restore и dotnet build задачи для целевых проектов .net core . Смотрите Это утверждение из задачи Nuget:

Если вы работаете с .NET Core или .NET Standard , используйте задачу .NET Core, которая имеет полную поддержку для всех сценариев пакетов и в настоящее время поддерживается dotnet.

Кроме того, вы должны использовать 5.0.100-rc.1.20452.10 in UseDotNet@2 task в соответствии с сообщением об ошибке.

Ответ №2:

Проблема возникает из-за того, что агент, который вы используете, не использует .Net Core sdk 5.0 preview 8.

Согласно вашему журналу ошибок, вы используете SDK 5.0.100-rc.1 , который не поддерживается [MSBuild]::GetTargetFrameworkIdentifier('$(TargetFramework)') .

Как решить эту проблему:

Вы можете заменить свой оригинал .Задачи загрузки Net Core со следующей задачей загрузки:

 - task: UseDotNet@2
  inputs:
    packageType: 'sdk'
    version: '5.0.100-preview.8.20417.9'
    includePreviewVersions: true
  

Затем перестройте свой конвейер.

Комментарии:

1. Спасибо за помощь. теперь я получил сообщение об ошибке MSB4236: указанный SDK ‘Microsoft.NET.Sdk’ не найден. на том же шаге

2. @Luiz Bicalho Пожалуйста, попробуйте вручную установить переменную среды MSBuildSDKsPath на C:agent_work_tooldotnetsdk5.0.100-preview.8.20417.9Sdks .

Ответ №3:

У меня также была аналогичная проблема. Я обновил свой проект с 3.1 -> 5.0, и параметр восстановления не удался. Тем не менее, я использовал dotnet cli для восстановления пакетов nuget.

Оказывается, был какой-то проект, WorkerExtensions.csproj который восстанавливался, и был построен с использованием 3.1. Я не уверен, где на этот проект вообще ссылались, поскольку его нигде нет в проекте, который я создавал.

   Project.AzureFunction -> /home/vsts/work/1/s/publish_output/Project.AzureFunction.dll
  Determining projects to restore...
  Restored /tmp/o0lv1ony.pel/WorkerExtensions.csproj (in 6.89 sec).
  WorkerExtensions -> /tmp/o0lv1ony.pel/buildout/Microsoft.Azure.Functions.Worker.Extensions.dll
##[error]/home/vsts/.nuget/packages/microsoft.net.sdk.functions/3.0.11/build/Microsoft.NET.Sdk.Functions.Build.targets(32,5): Error : It was not possible to find any compatible framework version
The framework 'Microsoft.NETCore.App', version '3.1.0' was not found.
  - The following frameworks were found:
      5.0.8 at [/opt/hostedtoolcache/dotnet/shared/Microsoft.NETCore.App]
  

Единственное, что я нашел близким, это Microsoft.Azure.Functions.Worker.Extensions.Http nuget. После расследования я все еще не могу понять это.

Несмотря на это, чтобы заставить сборку работать и развернуть ее, я включил как .NET Core 3.1, так и .NET 5 в YAML следующим образом. Я надеюсь правильно решить проблему в будущем.

 # For some reason, Azure Functions still require .NET Core 3.x even with .NET 5. Maybe it won't be needed in the future.
    - task: UseDotNet@2 
      displayName: "Install .NET Core 3.x"
      inputs:
        version: '3.x'
        packageType: sdk

    - task: UseDotNet@2
      displayName: 'Install .NET 5.x'
      inputs:
        packageType: sdk
        version: '5.x'