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

Tim*_*ong 1 teamcity build nuget

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

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

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

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

Jul*_*ian 7

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

这个答案适用于Nuget <2.7:

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

<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
Run Code Online (Sandbox Code Playgroud)

如果你看看里面$(SolutionDir)\.nuget\nuget.targets,你会看到几乎在顶部的一行如下:

<RestorePackages Condition="  '$(RestorePackages)' == '' ">true</RestorePackages>
Run Code Online (Sandbox Code Playgroud)

这意味着,如果没有RestorePackages找到变量(或者它的值为空),它将默认为true并在构建期间自动恢复缺少的包.

要阻止程序包还原步骤,请在TeamCity构建配置中创建一个名为system.RestorePackagesvalue的系统属性false,如下所示: 防止NuGet自动包恢复