为什么我的Azure Dev Ops Pipeline无法还原程序包?

时间:2019-10-07 13:09:18

标签: azure kendo-ui azure-devops nuget azure-pipelines

我正在使用Azure Dev Ops与ASP.NET Core Web应用程序一起使用。我正在建立管道,但出现错误。由于我的应用程序使用KendoUI库,因此这些错误来自程序包还原问题,我必须为所需的私有NuGet程序包创建服务连接。完成此操作后,构建仍然失败,我想知道出了什么问题?

错误消息

  

[错误] nuget命令失败,并显示退出代码(1)和错误(NU1102:无法找到版本(> =

的程序包Telerik.UI.for.AspNet.Core。      

2019.2.619)     -在NuGetOrg中找到1个版本[最近版本:2016.3.914] d:\ a \ 1 \ s \ MyCompany \ MyProject.UI.csproj中的错误       NU1102:无法找到版本(> = 2019.2.619)的程序包Telerik.UI.for.AspNet.Core         -在NuGetOrg中找到1个版本[最近版本:2016.3.914])

     

[错误]软件包还原失败

我与Telerik支持人员交谈,他说上述代码是因为身份验证失败,并且导致系统寻找较旧的版本,从而导致此兼容性问题。我被要求检查我的身份验证,但是此错误仍然存​​在。

我遵循了Telerik的文档,以了解如何实现此目标,您可以在这里找到https://www.telerik.com/blogs/azure-devops-and-telerik-nuget-packages

好,首先,我的项目在其根目录中有一个nuget.config文件。该文件的内容为:

nuget.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageRestore>
    <add key="enabled" value="True" />
    <add key="automatic" value="True" />
  </packageRestore>
  <activePackageSource>
    <add key="All" value="(Aggregate source)" />
  </activePackageSource>
  <packageSources>
    <add key="NuGet" value="https://api.nuget.org/v3/index.json" />
    <add key="Telerik" value="https://nuget.telerik.com/nuget" />
  </packageSources>
  <packageSourceCredentials>
    <Telerik>
      <add key="Username" value="me@mybusiness.com" />
      <add key="ClearTextPassword" value="MyFunkYPassword19!" />
    </Telerik>
  </packageSourceCredentials>
</configuration>

在Azure Dev Ops中,我已经按照其文档中所述的方式创建了一个服务连接,其名称为用户名和密码,即上述代码

Service Connection

在我的管道中,我添加了Nuget软件包,该软件包设置为使用上面的服务连接来还原。

# Build and test ASP.NET Core projects targeting the full .NET Framework.

# Add steps that publish symbols, save build artifacts, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/dotnet-core

trigger:
- master

pool:
  vmImage: 'windows-latest'

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'

steps:

- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'
- task: NuGetCommand@2
  inputs:
    command: 'restore'
    restoreSolution: '**/*.sln'
    feedsToUse: 'config'
    nugetConfigPath: 'MyProject/nuget.config'
    externalFeedCredentials: 'Telerik NuGet'

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

- task: VSTest@2
  inputs:
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

上述管道步骤的设置如下:

Pipeline Step Settings

有人有什么想法吗,我的设置不正确吗?

1 个答案:

答案 0 :(得分:1)

我设法使此工作偶然发生。导致问题的原因是步骤的顺序。生成的输出表明,无论我做什么,管道都在看tempNuget.config文件,而不是我指定的文件。由于工作中有两个NuGet步骤,所以我将Telerik上移了一个级别,这确保了系统使用正确的nuget.config文件,而不是查看它正在创建的临时文件。

以下是导致其开始运行的更改步骤,请注意,Telerik步骤已向上移动了一个步骤。

# Build and test ASP.NET Core projects targeting the full .NET Framework.

# Add steps that publish symbols, save build artifacts, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/dotnet-core

trigger:
- master

pool:
  vmImage: 'windows-latest'

variables:
  solution: '**/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'

steps:

- task: NuGetToolInstaller@1
- task: NuGetCommand@2
  inputs:
    command: 'restore'
    restoreSolution: '**/*.sln'
    feedsToUse: 'config'
    nugetConfigPath: 'MyProject/nuget.config'
    externalFeedCredentials: 'Telerik NuGet'
- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'           
- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

- task: VSTest@2
  inputs:
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'