F# 假冒、TeamCity和旧版本的NuGet软件包

F# 假冒、TeamCity和旧版本的NuGet软件包,f#,teamcity,nuget-package,f#-fake,F#,Teamcity,Nuget Package,F# Fake,我使用FAKE来构建我的项目并生成NuGet包。 假设我有一个项目“MyProjectA”。然后TeamCity使用伪脚本创建一个包含MyProjectA的NuGet包: MyProjectA-1.0.1.nupkg 然后我想在另一个项目中使用这个包:“MyProjectB”。因此,在FAKE中,我添加了依赖项: NuGet (fun p -> { p with Authors = authors

我使用FAKE来构建我的项目并生成NuGet包。 假设我有一个项目“MyProjectA”。然后TeamCity使用伪脚本创建一个包含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 build文件夹,发现有一个“packages”文件夹包含:

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


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

您可以在TeamCity中生成之前删除生成目录。在VCS根目录中,假设您使用git,则有一个名为
清除文件策略的设置
将其设置为
所有未跟踪的文件
。它将在每次构建之前删除所有包。再次假设在源代码管理中没有它们。

我遇到了同样的问题。我复制了GetPackageVersion并将其更改为排序并使用最新版本而不是第一个。另一种选择是读取
nuget.exe list-source
的输出,它的优点是使用nuget元数据而不是字符串拆分。有趣的是,我将尝试一下。谢谢