VSO 托管构建在第 3 部分引用的 dotnet 还原步骤中失败

VSO Hosted Build fails with in dotnet restore step on 3rd part references

我在 VSO 中有一个 .NET Core Web 项目,我正在尝试为其设置托管构建。该项目引用了第 3 方 (Syncfusion),当 dotnet 恢复步骤发生时它失败并出现以下错误:

Unable to resolve 'Syncfusion.XlsIO.MVC (>= 14.2600.0.32-preview2-final)' for '.NETCoreApp,Version=v1.1'.
Unable to resolve 'Syncfusion.Compression.MVC (>= 14.2600.0.32-preview2-final)' for '.NETCoreApp,Version=v1.1'.

此构建是一个非常基础的构建。我所做的只是采用默认的 VS 构建定义,并在 NeGet 恢复步骤之后添加了 dotnet 恢复步骤。

我做了一些阅读,发现 1 件事说你需要在 git 存储库的 packages 文件夹中包含第 3 方的东西,所以我修改并 git 忽略文件以包含 2包目录中的 Syncfusion nuget 文件夹。

Syncfusion nuget 包显然是nuget 包,但它们不在普通的nuget 中。在本地我不得不添加一个指向 Syncfusion URL.

的新 nuget 包源

编辑 基于其他问题和阅读。我做了以下更改。首先,我将构建步骤更改为基于此处列出的内容 (https://www.visualstudio.com/en-us/docs/build/apps/aspnet/ci/build-aspnet-core)。然后我删除了命令行步骤并将它们替换为相应的 .NET Core 步骤。这没什么区别,只是想列出我目前所在的位置。

我在项目根目录添加了一个nuget.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <!-- remove any machine-wide sources with <clear/> -->
    <clear />
    <!-- also get packages from the NuGet Gallery -->
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
    <!-- add a Team Services feed -->
    <add key="syncfusion" value="./packages/Syncfusion.Compression.MVC/14.2600.0.32-preview2-final" />
    <add key="syncfusion" value="./packages/Syncfusion.XlsIO.MVC/14.2600.0.32-preview2-final" />
  </packageSources>
  <activePackageSource>
    <add key="All" value="(Aggregate source)" />
  </activePackageSource>
</configuration>

上面列出的 2 个 Syncfusion 目录是本地 nuget 包,是 git 存储库的一部分。我不知道上面列出的路径是否正确(它是 nuget.config 文件(项目的根)的正确相对路径。

当 dotnet restore 步骤运行时,我仍然遇到无法解决的错误。出于某种原因,对于 XlsIO 一个,我现在只得到 1 个错误。我在日志中的任何地方都没有看到压缩包

最终工作答案 我开始工作的 nuget.config 文件是

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <!-- remove any machine-wide sources with <clear/> -->
    <clear />
    <!-- also get packages from the NuGet Gallery -->
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
    <!-- add a Team Services feed -->
    <add key="syncfusionCompression" value="packages\Syncfusion.Compression.MVC.2600.0.32-preview2-final" />
    <add key="syncfusionXls" value="packages\Syncfusion.XlsIO.MVC.2600.0.32-preview2-final" />
  </packageSources>
  <activePackageSource>
    <add key="All" value="(Aggregate source)" />
  </activePackageSource>
</configuration>

如果第三部分引用在可以从托管代理访问的 NuGet 服务器中,您可以参考这些步骤添加源:

  1. Edit/create 构建定义
  2. 第一种方式:在(工具:Nuget工具路径,参数:sources add -name {your feed name} -source {your feed URL} -username [username] -password [password])之前添加命令行构建step/task 注意:您需要在源代码管理和映射中添加Nuget.exe工具构建代理
  3. 另一种方法是,您可以在源代码管理(存储库)中包含 Nuget.config 文件,并通过指定 .Net Core Restore 构建的 --configfile [Nuget.Config path] 参数将此文件用作配置文件 step/task

否则,您需要将这些参考文件包含在源代码管理(存储库)中

已通过为包源提供唯一键名解决了该问题。

首先你已经添加了两次具有相同密钥名称的不同 NuGet 包源,如“syncfusion”。因此,它仅在 XlsIO NuGet 包中显示错误。然后您将键名更改为“syncfusionCompression”和“SyncfsuionXls”。所以,问题已经解决了。

键名在NuGet.Config中应该是唯一的。