我试图定义一个为.NET Core解决方案构建的管道。依赖项由Paket管理。依赖项从Azure工件提要中下载。
在第一阶段,我认为问题是Paket,我能够定义一个不用它构建的管道(使用私有包源,我们的私有提要)。
一旦我修复了Paket问题,我就会遇到一些问题,试图让dotnet restore工作起来。
这是我实际的YML定义:
trigger:
- none
pool:
vmImage: 'windows-latest'
steps:
- task: UseDotNet@2
inputs:
packageType: 'sdk'
version: '3.1.x'
- powershell: |
cd ..
dotnet tool install -g paket
- task: setCredentialManager@0
- task: PaketRestore@0
inputs:
PaketPath: '.paket'
- task: paketCredentialCleanup@0
# I'm not sure the following task is necessary
- task: PowerShell@2
inputs:
filePath: './installcredprovider.ps1'
- task: NuGetCommand@2
inputs:
command: 'restore'
restoreSolution: '**/*.sln'
feedsToUse: 'config'
nugetConfigPath: './NuGet.config'
- task: CmdLine@2
inputs:
script: 'dotnet restore'
- task: DotNetCoreCLI@2
inputs:
command: 'build'
projects: '*.csproj'NuGetCommand@2还原任务在此日志中失败:
NuGet Version: 5.4.0.6315
EXEC : Standard error : It was not possible to find any compatible framework version [d:\a\1\s\ArtifactsVs.csproj]
MSBuild auto-detection: using msbuild version '16.5.0.12403' from 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\bin'. Use option -MSBuildVersion to force nuget to use a specific version of MSBuild.
EXEC : Standard error : It was not possible to find any compatible framework version [d:\a\1\s\ArtifactsVs.csproj]
MSBuild P2P timeout [ms]: 120000
EXEC : Standard error : It was not possible to find any compatible framework version [d:\a\1\s\ArtifactsVs.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\bin\msbuild.exe "C:\Users\VssAdministrator\AppData\Local\Temp\NuGetScratch\rjysskyy.m01.nugetinputs.targets" /t:GenerateRestoreGraphFile /nologo /nr:false /v:q /p:NuGetRestoreTargets="C:\Users\VssAdministrator\AppData\Local\Temp\NuGetScratch\1cpdh2ma.wgd.nugetrestore.targets" /p:RestoreUseCustomAfterTargets="True" /p:RestoreTaskAssemblyFile="C:\hostedtoolcache\windows\NuGet\5.4.0\x64\nuget.exe" /p:RestoreSolutionDirectory="d:\a\1\s\\" /p:RestoreConfigFile="d:\a\1\s\NuGet.config" /p:SolutionDir="d:\a\1\s\\" /p:SolutionName="ArtifactsVs"
EXEC : Standard error : It was not possible to find any compatible framework version [d:\a\1\s\ArtifactsVs.csproj]
NuGet.CommandLine.ExitCodeException: Exception of type 'NuGet.CommandLine.ExitCodeException' was thrown.
EXEC : Standard error : It was not possible to find any compatible framework version [d:\a\1\s\ArtifactsVs.csproj]
at NuGet.CommandLine.MsBuildUtility.<GetProjectReferencesAsync>d__6.MoveNext()
EXEC : Standard error : It was not possible to find any compatible framework version [d:\a\1\s\ArtifactsVs.csproj]
--- End of stack trace from previous location where exception was thrown ---
EXEC : Standard error : It was not possible to find any compatible framework version [d:\a\1\s\ArtifactsVs.csproj]
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
EXEC : Standard error : It was not possible to find any compatible framework version [d:\a\1\s\ArtifactsVs.csproj]
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
d:\a\1\s\.paket\Paket.Restore.targets(219,5): error MSB3073: The command ""paket" restore --project "d:\a\1\s\ArtifactsVs.csproj" --output-path "obj" --target-framework "netcoreapp3.1"" exited with code 1. [d:\a\1\s\ArtifactsVs.csproj]
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(EXEC : Standard error : It was not possible to find any compatible framework version [d:\a\1\s\ArtifactsVs.csproj]
EXEC : Standard error : It was not possible to find any compatible framework version [d:\a\1\s\ArtifactsVs.csproj]
EXEC : Standard error : It was not possible to find any compatible framework version [d:\a\1\s\ArtifactsVs.csproj]
EXEC : Standard error : It was not possible to find any compatible framework version [d:\a\1\s\ArtifactsVs.csproj]
EXEC : Standard error : It was not possible to find any compatible framework version [d:\a\1\s\ArtifactsVs.csproj]
EXEC : Standard error : It was not possible to find any compatible framework version [d:\a\1\s\ArtifactsVs.csproj]
EXEC : Standard error : It was not possible to find any compatible framework version [d:\a\1\s\ArtifactsVs.csproj]
EXEC : Standard error : It was not possible to find any compatible framework version [d:\a\1\s\ArtifactsVs.csproj]
EXEC : Standard error : It was not possible to find any compatible framework version [d:\a\1\s\ArtifactsVs.csproj]
d:\a\1\s\.paket\Paket.Restore.targets(219,5): error MSB3073: The command ""paket" restore --project "d:\a\1\s\ArtifactsVs.csproj" --output-path "obj" --target-framework "netcoreapp3.1"" exited with code 1. [d:\a\1\s\ArtifactsVs.csproj])
##[error]Packages failed to restore
Finishing: NuGetCommand无论如何,忽略它,dotnet restore也会失败。
脚本installcredprovider.ps1的来源是这里。
存储库可以从这里下载(提要URL被部分混淆)。
提前感谢任何想帮忙的人!
发布于 2020-04-17 09:34:17
我创建了一个用于故障排除的测试项目。我发现帕克特需要.NET Core sdk 2.0.0。
如果未安装DotNetCore2.0.0,则Nuget还原任务将因上述错误"It was not possible to find any compatible framework version"而失败。如果错误The framework 'Microsoft.NETCore.App', version '2.0.0' was not found.,那么paket任务就会失败。
在安装了带有.NET Core sdk 2.0.0的UseDotNet任务之后。Nuget还原和paket还原都成功运行。请查看以下yaml:
pool:
vmImage: 'windows-latest'
steps:
- task: UseDotNet@2
inputs:
packageType: 'sdk'
version: '2.0.0'
- task: UseDotNet@2
inputs:
packageType: 'sdk'
version: '3.1.x'
- powershell: |
cd ..
dotnet tool install -g paket
- task: setCredentialManager@0
- task: PaketRestore@0
inputs:
PaketPath: '.paket'
- task: paketCredentialCleanup@0
# - task: PowerShell@2
# inputs:
# filePath: './installcredprovider.ps1'
# - task: NuGetToolInstaller@1
# inputs:
# versionSpec: 5.x
- task: NuGetCommand@2
inputs:
command: 'restore'
restoreSolution: '**/*.sln'
feedsToUse: 'config'
nugetConfigPath: './NuGet.config'对于上面的管道,任务setCredentialManager@0也是必须的,但是不需要运行./installcredprovider.ps1的powershell任务。
我还发现,上面的管道将无法在代理vs2017-win2016上运行,因为在执行nuget命令时会调用vs2017中的旧版本msbuild。
Paket还原、dotnet还原和nuget还原--它们都做同样的事情(dotnet还原和nuget还原将称为paket还原)。你只能把其中一个留在你的管道里。我进行了测试,我的项目是成功地与他们中的任何一个。
希望上面有帮助!
https://stackoverflow.com/questions/61204147
复制相似问题