21

我已经在我的解决方案上设置了 NuGet 包还原,它在我的本地机器上运行良好。我按照此处提供的说明进行操作:

http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

我遇到的问题是在我的构建服务器上发生以下错误:

默认情况下禁用包还原。要同意,请打开 Visual Studio 选项对话框,单击包管理器节点并选中“允许 NuGet 在构建期间下载丢失的包”。您还可以通过将环境变量“EnableNuGetPackageRestore”设置为“true”来表示同意。

不幸的是,我无法访问构建服务器,因为它是在场外控制的,因此无法更新环境变量。有没有其他方法可以解决这个问题?我可以添加到解决方案文件或类似文件中以允许包恢复的任何内容吗?

4

9 回答 9

15

试试这个包:

Install-Package NuGetEnablePackageRestore 
于 2012-10-08T22:07:07.347 回答
14

NuGet 可以对其行为使用本地设置,如果您不能 100% 确定服务器的配置方式,则可能无法预测。

我更喜欢将 NuGet 设置放在受<sln root>/.nuget/NuGet.targets版本控制的文件中并放在一个位置。我通过 3 次快速编辑得到了这个,编辑后 <sln root>/.nuget/NuGet.targets它们应该如下所示:

变化1

<!-- Enable the restore command to run before builds -->
<RestorePackages Condition="  '$(RestorePackages)' == '' ">true</RestorePackages>

变化 2

<!-- Determines if package restore consent is required to restore packages -->
<RequireRestoreConsent Condition=" '$(RequireRestoreConsent)' != 'false' ">false</RequireRestoreConsent>

我的评论:笨拙的逻辑,但认为“要求同意不等于假必须为真”(原文)因为“要求同意等于真必须为真”(翻译)并且将最后一部分更改为“”是有意义的(编辑)

更改 3:我还添加/取消注释<PackageSource ... >标记以删除对

<ItemGroup Condition=" '$(PackageSources)' == '' ">
    <PackageSource Include="https://nuget.org/api/v2/" />        
</ItemGroup>
于 2013-10-30T20:02:46.030 回答
5

当我尝试使用 Jenkins 构建我的一个项目时遇到了这个问题,并通过简单地将.nuget\NuGet.targets文件中的一个值从更改truefalse.

我变了:

<!-- Determines if package restore consent is required to restore packages -->
<RequireRestoreConsent Condition=" '$(RequireRestoreConsent)' != 'false' ">true</RequireRestoreConsent>

<!-- Determines if package restore consent is required to restore packages -->
<RequireRestoreConsent Condition=" '$(RequireRestoreConsent)' != 'false' ">false</RequireRestoreConsent>

请注意元素值已更改。希望这可以帮助。

于 2013-10-23T05:34:13.723 回答
1

在 %appdata%\NuGet\NuGet.Config 添加以下部分

    <packageRestore>
    <!-- Package Restore and MSBuild-Integrated Package Restore -->
    <add key="enabled" value="True" />

    <!-- Automatic Package Restore in Visual Studio -->
    <add key="automatic" value="True" />
  </packageRestore>

完整示例

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <activePackageSource>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
  </activePackageSource>
  <packageRestore>
    <!-- Package Restore and MSBuild-Integrated Package Restore -->
    <add key="enabled" value="True" />

    <!-- Automatic Package Restore in Visual Studio -->
    <add key="automatic" value="True" />
  </packageRestore>
</configuration>
于 2016-08-16T00:57:43.400 回答
0

我可能可以尝试在 .nuget\NuGet.targets 文件中将 RestorePackages 属性设置为 true:

<RestorePackages Condition="  '$(RestorePackages)' == '' ">true</RestorePackages>
于 2012-10-08T20:00:47.003 回答
0

对于遇到此问题的任何人,正在寻找一种在构建服务器上恢复包的方法,NuGet Package Restore很好地概述了当前选项。

我选择使用命令行包还原方法。就像发出以下命令行一样简单:

C:><path to nuget.exe> restore <path to solution.sln>

nuget.exe 可以从https://docs.nuget.org/consume/installing-nuget获得。我使用了 Command-Line Utility Latest 3.X版本。

于 2016-06-23T13:16:40.787 回答
0

运行此命令以修复 NuGet 启用包

Install-NuGetEnablePackageRestoreFix

然后在运行启用命令之后

Install-Package NuGetEnablePackageRestore

于 2016-08-04T06:38:13.690 回答
0

安装包 NuGetEnablePackageRestore

于 2017-05-10T09:10:51.730 回答
-2

- 转到工具 -> 库包管理器 -> “包还原” -> 取消选中“允许 NuGet 下载丢失的包”和“自动检查...”

  • 重建解决方案

  • 清洁解决方案

  • 现在选中“允许 NuGet 下载丢失的包”和“自动检查...”

  • 重建解决方案

于 2013-09-10T13:44:51.003 回答