如何让NuGet跳过某些版本(即在我的构建服务器上)的自动包恢复?

时间:2013-04-26 09:04:16

标签: build teamcity nuget

我正在使用NuGet来管理依赖项。我非常喜欢NuGet,它为我做了很多简单的事情。

在Visual Studio中,我使用自动包还原功能,以便在构建期间更新包。我还找到了一种让nuget.exe文件在缺失的情况下自行下载的方法。这很棒,这意味着开发人员可以查看源代码并构建它。它使依赖管理几乎成为一种“不用脑子”。

但是,我遇到了TeamCity CI构建问题。在TeamCity中构建时,我更喜欢使用TC的NuGet Installer构建步骤。我发现这使我能够更直观地控制构建过程,这意味着我可以指定我想要使用的包源。但是,这与NuGet自动恢复有些冲突,因为它会下载nuget.exe并尝试再次更新所有软件包。

构建确实有效但我可以通过避免第二次NuGet更新操作来提高效率,如果有很多依赖项,这可能需要一些时间。我需要的是一种只有在构建服务器上运行时才能阻止自动恢复的方法。有没有人想过这样做的方法?

1 个答案:

答案 0 :(得分:7)

Nuget 2.7使用更新的方法进行包恢复。

这个答案适用于Nuget< 2.7

NuGet包恢复由每个csproj文件中的以下行触发:

<Import Project="$(SolutionDir)\.nuget\nuget.targets" />

如果您查看$(SolutionDir)\.nuget\nuget.targets内部,您会在顶部看到如下所示的行:

<RestorePackages Condition="  '$(RestorePackages)' == '' ">true</RestorePackages>

这意味着,如果找不到变量RestorePackages(或其值为空),它将默认为true并在构建期间自动恢复丢失的包。

要阻止程序包还原步骤,请在TeamCity构建配置中创建名为system.RestorePackages的系统属性,其值为false,如下所示: Preventing NuGet automatic package restore