1

我正在使用 NuGet 来管理依赖项。我真的很喜欢 NuGet,它让我的许多事情变得简单多了。

在 Visual Studio 中,我使用自动包还原功能,以便在构建期间更新包。我还找到了一种让 nuget.exe 文件在丢失时自行下载的方法。这太棒了,这意味着开发人员可以检查源代码并构建它。它使依赖管理几乎是“不费吹灰之力”。

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

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

4

1 回答 1

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,如下所示: 防止 NuGet 自动包还原

于 2013-04-26T09:18:38.323 回答