【问题标题】:VSTS Build Package location configVSTS 构建包位置配置
【发布时间】:2017-07-12 14:48:57
【问题描述】:

在 VSTS 中构建项目时,我们首先在 NUget 还原步骤中下载 nuget 包。

nuget.config 的路径指向解决方案文件夹 .nuget 中的一个文件。 在这个文件中有一个存储库的路径。

运行构建时,恢复步骤工作正常,所有包都恢复到此目录中。

2017-07-12T14:11:15.7270814Z Adding package '***' to folder 'd:\a\3\s\microservices\MyPackages12'

但在构建过程中,由于位置错误,无法找到包。

2017-07-12T14:11:27.7978408Z           Considered "..\..\MyPackages\

这似乎只对来自 vsts 的包提要中的包失败。

我可以在哪里或如何更改构建步骤中包的位置?

谢谢..

编辑

Nuget.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="repositoryPath" value="..\MyPackages" />
  </config>
  <packageSources>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/"  />
    <add key="MyWebAPI" value="https://MyWebAPI.pkgs.visualstudio.com/_packaging/MyWebAPI/nuget/v3/index.json" protocolVersion="3" />
  </packageSources>
</configuration>

编辑 2 我已经让它工作了,但不是我喜欢的那样。

第一个当前解决方案。 nuget 安装程序的第 2 版

当前的 nuget.config。

<?xml version="1.0" encoding="utf-8"?>
 <configuration>
  <config>
<add key="repositoryPath" value="..\s\WebSiteCiCd\Packages" />
  </config>
  <packageSources>
    <!-- remove any machine-wide sources with <clear/> -->
    <clear />
    <!-- add a Team Services feed -->
    <add key="MyGreatFeed" value="https://CICD.pkgs.visualstudio.com/_packaging/CICDWebAPI/nuget/v3/index.json" />
    <!-- also get packages from the NuGet Gallery -->
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
  </packageSources>
  <activePackageSource>
    <add key="All" value="(Aggregate source)" />
  </activePackageSource>
 </configuration>

我不喜欢的是

<add key="repositoryPath" value="..\s\WebSiteCiCd\Packages" />

我想要一个没有特定项目名称的集中式 nuget.config。

我认为的问题是因为构建任务不会查看 nuget.config 设置,而是采用 de proj 文件中的设置..

这是在失败的构建中..在这种情况下我使用了

<add key="repositoryPath" value="..\MyPackages" />

这会导致恢复步骤

2017-07-14T06:35:40.5913207Z Restoring NuGet package Microsoft.AspNet.WebPages.3.2.3.
2017-07-14T06:35:40.5923209Z   GET https://www.nuget.org/api/v2/Packages(Id='Microsoft.AspNet.WebPages',Version='3.2.3')
2017-07-14T06:35:40.6643208Z   OK https://www.nuget.org/api/v2/Packages(Id='Microsoft.AspNet.WebApi.WebHost',Version='5.2.3') 113ms
2017-07-14T06:35:40.6683214Z   GET https://www.nuget.org/api/v2/package/Microsoft.AspNet.WebApi.WebHost/5.2.3
2017-07-14T06:35:40.6798131Z Completed installation of Microsoft.AspNet.Razor 3.2.3
2017-07-14T06:35:40.6818132Z Adding package 'Microsoft.AspNet.Razor.3.2.3' to folder 'd:\a\1\MyPackages'
2017-07-14T06:35:40.6828123Z Completed installation of Microsoft.AspNet.Mvc 5.2.3

但在构建步骤中它使用不同的位置

 2017-07-14T06:35:49.5938928Z d:\a\1\s\WebSiteCiCd\WebSiteCiCd\WebSiteCiCd.csproj(297,5): error : This project references NuGet package(s) that are missing on this computer. 
Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. 
The missing file is ..\packages\Microsoft.Net.Compilers.1.3.2\build\Microsoft.Net.Compilers.props.

它使用 ..\packages\ 参考路径

希望这会有所帮助..

【问题讨论】:

  • nuget.config的详细代码是什么?这些引用的路径是什么?
  • 你能在这里或在 OneDrive 上分享详细的构建日志吗?尝试参考这篇文章Migrating to automatic restore
  • 我已经用编辑 2 @starain-MSFT 更新了问题

标签: nuget azure-pipelines packages.config


【解决方案1】:

任务使用临时 Nuget 配置文件(例如 -ConfigFile xxx_work\17\Nuget\tempNuGet_1951.config),然后 repositoryPath 基于此临时文件。

所以对于 ..\s\WebSiteCiCd\Packages 路径,包将恢复到 xxx_work\17\s\WebSiteCiCd\Packages 文件夹。 (..\MyPackages=> xxx_work\17\MyPackages)。

更好的方法是你可以删除repositoryPath的设置(删除配置部分),只使用localbuild server的默认设置,然后结构是相同的。

【讨论】:

  • 这是我最初的方法......但没有奏效。因为我有一个包提要,所以我需要一个 nuget.config 文件。从那时起,我在包还原方面遇到了问题。我了解参考路径和包文件夹深度的问题。但最让我印象深刻的是构建没有使用 nuget.config。因为我引用 ..\packages\ 文件夹而不是 ..\Mypackages\。我是否需要将 nuget.config 放在更靠近根目录的更高级别才能让构建使用此文件?
  • @Frans 我的意思是你只需要删除 Nuget.config 文件中的配置部分,之后仍然在构建任务中使用更新的 Nuget.config 文件。另一方面,无论 Nuget.config 中的 repositoryPath 设置如何,用于构建的引用路径都是固定的。
  • 我今天解决了这个问题。 de nuget 配置文件中没有repositoryPath,使用2.0 版本的包任务,在de csproj 文件中为所有包设置正确的提示路径。
【解决方案2】:

更新项目文件中的引用。看起来有人从他们机器上存在的非标准位置引用了一个包。

解决此类问题的最简单方法是删除所有您的本地软件包(或者只是从源代码管理中重新同步),然后让恢复在本地运行。这将很快找出引用问题。

【讨论】:

    【解决方案3】:

    感谢@starain-MSFT 的解决方案:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <packageSources>
        <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
        <add key="My packages" value="https://mypackages.pkgs.visualstudio.com/_packaging/MyWebAPI/nuget/v3/index.json" />
      </packageSources>
    </configuration>
    

    在 csproj 文件中设置包的提示路径:例如

      <Reference Include="Antlr3.Runtime, Version=3.5.0.2, Culture=neutral, PublicKeyToken=eb42632606e9261f, processorArchitecture=MSIL">
          <HintPath>..\packages\Antlr.3.5.0.2\lib\Antlr3.Runtime.dll</HintPath>
    

    仍然认为如果构建任务可以使用 nuget.config 文件来设置包的选项会很方便

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多