#.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'