我的解决方案使用来自官方NuGet服务器和私有NuGet服务器的软件包。我正在尝试配置构建管道以从这两个位置还原软件包,但是一直在尝试从公共NuGet服务器还原我的私有软件包的过程中不断收到NuGet还原构建错误,因此可以理解地失败了。
我对我应该做的事情有些茫然。看来在Azure DevOps中没有可以为NuGet还原步骤进行的设置,因为看起来现在已经在YAML文件中进行了所有配置。关于我可能做错了什么或我可以尝试做的其他任何建议,将不胜感激。
我的解决方案中的我的NuGet.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageRestore>
<!-- Allow NuGet to download missing packages -->
<add key="enabled" value="True" />
<!-- Automatically check for missing packages during build in Visual Studio -->
<add key="automatic" value="True" />
</packageRestore>
<packageSources>
<add key="NuGet official package source" value="https://api.nuget.org/v3/index.json" />
<add key="Private" value="http://privatenuget.net:8080/nuget" />
</packageSources>
<activePackageSource>
<add key="All" value="(Aggregate source)" />
</activePackageSource>
</configuration>
管道使用的我的YAML文件:
# ASP.NET
# Build and test ASP.NET projects.
# Add steps that publish symbols, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/apps/aspnet/build-aspnet-4
pool:
vmImage: 'VS2017-Win2016'
variables:
solution: 'MyProject.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
steps:
- task: NuGetToolInstaller@0
- task: NuGetCommand@2
inputs:
nugetConfigPath: 'MyProject\NuGet.config'
restoreSolution: '$(solution)'
- task: VSBuild@1
inputs:
solution: '$(solution)'
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)"'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: VSTest@2
inputs:
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
我在构建的NuGetCommand步骤上遇到的错误:
The nuget command failed with exit code(1) and error(Errors in packages.config projects
NU1000: Unable to find version '1.1.5' of package 'MyPackage'.
https://api.nuget.org/v3/index.json: Package 'MyPackage' is not found on source 'https://api.nuget.org/v3/index.json'.)
Packages failed to restore
答案 0 :(得分:3)
答案 1 :(得分:2)
您的YML文件不正确,您必须添加 feedsToUse:config
- task: NuGetCommand@2
displayName: 'Nuget Restore'
inputs:
restoreSolution: '$(solution)'
feedsToUse: config
nugetConfigPath: nuget.config
答案 2 :(得分:0)
我只是遇到了这个问题,但是我的项目中没有要使用的NuGet.config文件,也不想添加一个文件。至少可以说,使用NuGet.config要求您以明文形式存储个人访问令牌(PAT),这至少不理想,尤其是当它与项目一起提交给您的回购协议时。
经过大量研究,我得出了一个接近完美的解决方案。使用Azure DevOps中的变量组,可以添加可用于所有管道的变量(和机密)。在我看来,我可以将整个NuGet.config放在那里(连同PAT)一起作为一个秘密,然后将其通过管道传递到实际的NuGet.config文件中。
您已经有一个NuGet.config文件,但是如果其他人落在该文件上并从头开始,则需要以下内容:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
<add key="MyPrivateFeed" value="*** PRIVATE FEED URL HERE ***" />
</packageSources>
<packageSourceCredentials>
<MyPrivateFeed>
<add key="Username" value="anything" />
<add key="ClearTextPassword" value="*** PAT HERE ***" />
</MyPrivateFeed>
</packageSourceCredentials>
</configuration>
填写您的Feed URL和PAT,然后将其全部复制并粘贴到变量组中名为“ NuGet.config”的变量中。单击变量上的锁定图标以使其成为秘密。该变量可以命名为任意名称,但是如果使用其他变量,则需要在下面的代码中对其进行更新。
然后,您只需要包含变量组:
variables:
- group: my-variable-group
在将使用私有供稿的其他任何步骤(例如dotnet build
)之前,将以下内容添加到管道Yaml中。
- bash: echo -e '$(NuGet.config)' > NuGet.config
displayName: Create NuGet.config