【问题标题】:FAKE, TeamCity and old versions of NuGet packagesFAKE、TeamCity 和旧版本的 NuGet 包
【发布时间】:2014-12-18 12:45:56
【问题描述】:

我使用 FAKE 来构建我的项目并生成 NuGet 包。 假设我有一个项目“MyProjectA”。然后 TeamCity 使用 FAKE 脚本创建一个包含 MyProjectA 的 NuGet 包:

MyProjectA-1.0.1.nupkg

然后我想在另一个项目中使用这个包:“MyProjectB”。所以在 FAKE 中我添加了依赖项:

NuGet (fun p -> 
        { p with               
            Authors = authors
            Project = "MyProjectB"
            // ...
            Dependencies = ["MyProjectA",  GetPackageVersion "./packages/" "MyProjectA" |> RequireExactly ]
            Files = // ..
         }

重要提示:TeamCity 也为 MyProjectB 生成 NuGet(假设我在另一个项目中需要它)。

在某些时候,我意识到我需要对 MyProjectA 进行修复。所以我这样做了,TeamCity/FAKE 生成了更新版本的 NuGet 包:

MyProjectA-1.0.2.nupkg

然后我也更新 MyProjectB(即确保它引用新版本的 MyProjectA)。

但是:TeamCity 会生成一个引用旧版本 MyProjectA 的 MyProjectB NuGet 包!!

我查看了 TeamCity 构建文件夹,发现有一个“packages”文件夹包含:

+-+ packages
  | MyProjectA-1.0.1.nupkg
  | MyProjectA-1.0.2.nupkg

看起来 TC 没有清理其工作文件夹,这很好,因为它减少了构建项目所需的时间。然而,在这种情况下,它也会导致 FAKE GetPackageVersion 函数失败(我猜它需要第一个与名称匹配的包 - 在这种情况下,旧包始终是按字母顺序排列的第一个包,因为它的版本号较低)。

目前我发现的唯一解决方法是从 TC 文件夹中手动删除旧包。有没有更好的解决方案?

【问题讨论】:

  • 我遇到了同样的问题。我复制了 GetPackageVersion 并将其更改为排序并使用最新的而不是第一个。另一种选择是读取nuget.exe list -source <packages dir> <package name> 的输出,其优点是使用 Nuget 元数据而不是字符串拆分。

标签: f# teamcity nuget-package f#-fake


【解决方案1】:

您可以在 TeamCity 中构建之前删除构建目录。在您的 VCS Root 中,假设您使用 git,有一个名为 Clean Files Policy 的设置将其设置为 All untracked files。它会在每次构建之前删除所有包。再次假设您在源代码管理中没有它们。

【讨论】:

  • 有趣 - 我会试一试。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-13
  • 1970-01-01
相关资源
最近更新 更多