【发布时间】: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