FAKE,TeamCity和旧版NuGet包

时间:2014-12-18 12:45:57

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

我使用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会生成一个MyProjectB NuGet包,引用旧版本的MyProjectA !!

我查看了TeamCity构建文件夹并注意到那里有一个"包"包含以下内容的文件夹:

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

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

目前我找到的唯一修复方法是从TC文件夹中手动删除旧包。有更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

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