Build 如何让NuGet跳过某些生成的自动包还原(即在生成服务器上)?

Build 如何让NuGet跳过某些生成的自动包还原(即在生成服务器上)?,build,teamcity,nuget,Build,Teamcity,Nuget,我正在使用NuGet管理依赖项。我真的很喜欢NuGet,它让很多事情对我来说都简单多了 在VisualStudio中,我使用了自动包还原功能,以便在生成过程中更新包。我还找到了一种方法,可以让nuget.exe文件在丢失时自行下载。这真是太棒了,这意味着开发人员可以查看源代码并构建它。它使依赖关系管理几乎成为一个“无需思考的问题” 但是,我对TeamCity CI构建有一个问题。在TeamCity中构建时,我更喜欢使用TC的NuGet安装程序构建步骤。我发现这使我能够更直观地控制构建过程,这意味

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

在VisualStudio中,我使用了自动包还原功能,以便在生成过程中更新包。我还找到了一种方法,可以让nuget.exe文件在丢失时自行下载。这真是太棒了,这意味着开发人员可以查看源代码并构建它。它使依赖关系管理几乎成为一个“无需思考的问题”

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


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

Nuget 2.7使用了一种更新的包恢复方法

这个答案适用于Nuget<2.7

NuGet package restore由每个csproj文件中的以下行触发:

<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
这意味着,如果找不到变量
RestorePackages
(或其值为空),它将默认为
true
,并在生成过程中自动恢复丢失的包

为了防止包还原步骤,在TeamCity构建配置中,创建名为
system.RestorePackages
的系统属性,其值为
false
,如下所示:

Nuget 2.7使用了更新的包还原方法

这个答案适用于Nuget<2.7

NuGet package restore由每个csproj文件中的以下行触发:

<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
这意味着,如果找不到变量
RestorePackages
(或其值为空),它将默认为
true
,并在生成过程中自动恢复丢失的包

为了防止包还原步骤,在TeamCity构建配置中,创建名为
system.RestorePackages
的系统属性,其值为
false
,如下所示:

啊哈!是的,看起来很有希望。谢谢你的建议。我会在几分钟内尝试一下,然后再报告。好的,看起来确实有效。我创建了一个值为false的系统属性system.RestorePackages,并且构建日志不再包含对NuGet更新的任何引用。所以我认为这是一个赢家!注意:我先尝试使用环境变量,但没有成功。可能是msbuild目标正在覆盖它,因此系统属性(具有最高优先级)似乎可以工作。啊哈!是的,看起来很有希望。谢谢你的建议。我会在几分钟内尝试一下,然后再报告。好的,看起来确实有效。我创建了一个值为false的系统属性system.RestorePackages,并且构建日志不再包含对NuGet更新的任何引用。所以我认为这是一个赢家!注意:我先尝试使用环境变量,但没有成功。可能是msbuild目标正在覆盖它,因此系统属性(具有最高优先级)似乎可以工作。