我有许多 Azure Functions 设置,它们通过
vmImage: 'windows-latest'
构建服务器上的 Azure Pipelines 进行构建。它们最初是使用 .NET 7 设置的,并且运行良好一年左右。
我最近将项目升级到.NET 8(刚刚更新了版本),它们将不再在构建服务器上编译。它们在本地编译并运行得很好。
构建过程如下:
dotnet build
步骤是现在失败的步骤。它似乎试图从 azure pipeline 工件而不是上游源下载依赖包(这些包没有直接安装到我的项目中)。
无法从“https://pkgs.dev.azure.com/MYPROJECT/someguid/_packaging/anotherguid/nuget/v3/flat2/microsoft.netcore.targets/”下载包“Microsoft.NETCore.Targets.3.0.0” 3.0.0/microsoft.netcore.targets.3.0.0.nupkg'。
响应状态码并不表示成功:401(未经授权)。
这样的页面有几十个,每个页面都有几十个包依赖项。
什么不起作用:
有什么作用:
具体有哪些变化?
将
.csproj
从 net8.0
更新为
net7.0
更新以下 nuget 包(不更新它们会出现奇怪的
Invalid combination of TargetFramework and AzureFunctionsVersion is set
错误)
Microsoft.Extensions.DependencyInjection -> 8.0.1
Microsoft.Azure.Functions.Worker.Extensions.Abstractions -> 1.3.0
Microsoft.Azure.Functions.Worker -> 2.0.0
Microsoft.Azure.Functions.Worker.Extensions.Storage -> 6.6.0
Microsoft.Azure.Functions.Worker.Sdk -> 2.0.0
当发生此类事情时,管道总是看起来像一个猜谜游戏,所以希望其他人也遇到过这种情况,或者有一个很好的猜测,我可以尝试一下。这些功能在 .NET 7 上仍然可以正常构建,但我真的很想将它们更新到 .NET 8。
我猜测这可能与功能工作程序包更新有关,但我似乎无法将两者分开。
从您对问题的描述来看,401错误存在于dotnet构建步骤中。
请参阅此文档:为什么我的构建、发布或测试步骤无法恢复包?
大多数 dotnet 命令(包括构建、发布和测试)都包含隐式恢复步骤。即使您在前面的步骤中成功运行了 dotnet 恢复,这也会对经过身份验证的提要失败,因为前面的步骤将清除它使用的凭据。
401错误的原因是dotnet恢复步骤将清除它使用的凭据。那么在 dotnet 构建步骤中无法读取有效凭据。
要解决此问题,您可以在用于 NuGet 身份验证的 dotnet 恢复任务之前添加 NuGet Authenticate 任务。
这是管道示例:
steps:
- task: UseDotNet@2
inputs:
packageType: 'sdk'
version: '8.0.x'
- task: NuGetToolInstaller@1
inputs:
versionSpec: '6.0.x'
- task: NuGetAuthenticate@1
displayName: 'NuGet Authenticate'
- task: DotNetCoreCLI@2
inputs:
command: 'restore'
- task: DotNetCoreCLI@2
inputs:
command: 'build'
NuGet Authenticate 任务生成的 NuGet 凭据将在整个代理作业中有效。它可以解决dotnet构建任务中的401身份验证错误。