【问题标题】:NuGet Respository for TFS Build用于 TFS 构建的 NuGet 存储库
【发布时间】:2018-10-18 21:19:58
【问题描述】:

我无法通过所有搜索找到明确的答案。我们有 TFS 2015,并希望使用自定义 NuGet 存储库来存储我们的内部包。

目前,它们与 TFS 安装位于同一服务器上的物理驱动器上。但是它总是找不到任何包。

我的困惑出现在这里。为了将此目录用作 Nuget 存储库,我们是否需要安装其他软件或生成一些 index.json?文件夹中存在的包还不够?我看到很多文章都在谈论 Package Management 插件(成本超过 5 人)或升级到 TFS 2017。

我的理解是否正确,仅仅将包保存在服务器可以访问并指向它的位置是不够的?

谢谢!

【问题讨论】:

  • 您查看过 NuGet 文档吗?非常清楚地解释了使用文件共享作为包源。 docs.microsoft.com/en-us/nuget/hosting-packages/local-feeds
  • 也许我不清楚。我很抱歉。这专门用于在 TFS 上运行构建。如果我想按照文档所述在本地拉取东西,它就可以工作。但我希望我们的构建从自定义 repo 中提取,并且对 TFS 使用它的要求感到困惑。
  • 如果您的nuget.config 说要使用包源,那么 NuGet 将使用该包源。与 TFS 无关。构建系统所做的只是在命令行上运行东西。

标签: tfs msbuild nuget nuget-package


【解决方案1】:

更新:

根据 BehemothDan 下面的 cmets,通过在 IIS 中的服务器上安装 Nuget.Server 作为应用程序解决了这个问题。只需为 TFS 构建过程提供 URL 而不是目录路径,一切都很好。 (将 Nuget.Server 指向目录)


正如丹尼尔所说“NuGet 将使用该包源。与 TFS 无关。构建系统所做的只是在命令行上运行东西。”

所以,你只需要设置源:

  1. 创建Local feednuget 存储库,可以是共享文件夹 可由 TFS 访问。)
  2. 将所需的包下载/复制到 repo 文件夹。
  3. nuget.config中设置包源或者直接在中添加源 视觉工作室。

因此,当您在 TFS 中构建时,nuget 会自动识别源并恢复包。

你可以参考这篇文章来理解:

Creating a local NuGet repository for offline development


此外,TFS 在 TFS 2017 及更高版本中引入了Package Management 功能。

因此,如果升级到 TFS 2017 或更高版本,您可以直接在 TFS 中管理包。

详情请见Get started with NuGet Package Management in VSTS and TFS

也可以参考这篇文章Publish to Private NuGet Server from TFS2017 Build

【讨论】:

  • @BehemothDan 你解决了这个问题吗?有更新吗?
  • 我做到了。我最终在 IIS 中的服务器上安装 Nuget.Server 作为应用程序。一旦我能够为 TFS 构建过程提供 URL 而不是目录路径,一切都会很好。有趣的是,我最终将 Nuget.Server 指向了我已经在使用的同一目录,因为我使用了 nuget init 命令来构建它。
  • @BehemothDan 很高兴知道您已经解决了这个问题,我已经用您的解决方案 (cmets) 更新了答案。您可以Accept it as an Answer,这对阅读此主题的其他社区成员会有所帮助。
【解决方案2】:

如果您的构建无法在 TFS 上正确运行,则意味着与本地计算机相比,您在 TFS 上的文件夹(或依赖项)结构不同。在这种情况下,TFS 代理会尝试在 TFS 上编译源代码,但找不到依赖项。

为了将目录用作 Nuget 存储库,您无需安装任何东西,但请确保您应该了解一些事项。您有两种方法来引用您的包:您可以使用 Package 引用,使用 PackageReference 节点,它直接在项目文件中管理 NuGet 依赖项,其次是 Packages.config 节点,它将配置保存在 .config 文件中.

重要的是 PackageReference 用于 .NET Core 项目,那么您要构建哪种项目?

.NET 完整框架项目支持 PackageReference,但目前默认为 packages.config

我的建议是:-如果您正在处理一个 .netcore 项目,请使用 PackageReference 并打开您的解决方案,并查看您的所有依赖项是否都指向

%SystemDrive%\Users\.nuget

为了正确编译,TFS 上应该有相同的路径,出于优化原因,您不应将此文件夹移动到另一个文件夹,因此如果您负责 TFS,请监控 C 驱动器的空间,因为它可能会增长成倍增长。

-如果您处理的不是 .NetFramework,而不是 Core,那么您应该像 @Andy Li-MSFT 所说的那样创建一个本地存储库。我建议您逐步阅读我不久前在此处发布的答案: https://stackoverflow.com/a/43791395/819153

【讨论】:

    猜你喜欢
    • 2014-11-26
    • 1970-01-01
    • 2014-08-29
    • 2017-05-28
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2018-05-12
    • 2017-04-27
    相关资源
    最近更新 更多