NuGet包还原在生成服务器上不起作用

NuGet包还原在生成服务器上不起作用,nuget,nuget-package,Nuget,Nuget Package,我已经在我的解决方案上设置了NuGet Package Restore,它在我的本地机器上运行良好。我遵循此处提供的说明: 我遇到的问题是在生成服务器上发生以下错误: 默认情况下禁用包还原。若要给予同意,请打开Visual Studio选项对话框,单击“包管理器”节点并选中“允许NuGet在生成期间下载丢失的包”。您还可以通过将环境变量“enablenUgetPackageStore”设置为“true”给予同意 不幸的是,我没有访问构建服务器的权限,因为它是非现场控制的,所以无法更新环境变量。

我已经在我的解决方案上设置了NuGet Package Restore,它在我的本地机器上运行良好。我遵循此处提供的说明:

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

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


不幸的是,我没有访问构建服务器的权限,因为它是非现场控制的,所以无法更新环境变量。还有别的办法吗?我可以向解决方案文件或类似文件中添加任何允许包还原的内容?

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

<RestorePackages Condition="  '$(RestorePackages)' == '' ">true</RestorePackages>
true
试试这个软件包:

Install-Package NuGetEnablePackageRestore 

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

  • 重建解决方案

  • 清洁溶液

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

  • 重建解决方案


我在尝试与Jenkins一起构建一个项目时遇到了这个问题,通过简单地将
.nuget\nuget.targets
文件中的一个值从
true
更改为
false
,我成功地实现了这个目标

我改变了:

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

真的


假的
请注意,元素值已更改。
希望这能有所帮助。

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

我更喜欢将NuGet设置放在
/.NuGet/NuGet.targets
文件中,该文件受版本控制,位于单个位置。我通过对
/.nuget/nuget.targets
进行3次快速编辑得到了这个结果,编辑后它们应该如下所示:

更改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>

假的
我的评论:笨拙的逻辑,但认为“需要同意不等于虚假必须” “真实”(原文)as“需要与真实相等的同意” 正确”(已翻译),将最后一部分更改为 “假”(编辑)

更改3:我还添加了
标记以删除对

<ItemGroup Condition=" '$(PackageSources)' == '' ">
    <PackageSource Include="https://nuget.org/api/v2/" />        
</ItemGroup>

对于那些在构建服务器上寻找恢复包的方法时遇到这个问题的人,可以很好地概述当前的选项

我选择使用命令行包还原方法。只需发出以下命令行即可:

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

无法从中获取nuget.exe。我使用了最新版本的命令行实用程序3.X.

运行此命令来修复NuGet Enable包

安装NuGetEnablePackageRestoreFix

然后运行Enable命令


在%appdata%\NuGet\NuGet.Config中安装软件包NuGetEnablePackageStore

在内部添加以下部分

    <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>


安装软件包NuGetEnablePackageStore

刚刚尝试了这个,但没有成功,谢谢您的输入。您是否检查了解决方案中所有项目的csproj文件属性
true
?我相信所有使用NuGet的项目。顺便说一句,您还可以尝试在本地还原包:只需从FS中删除所有包,然后尝试运行
msbuildyoursolution.sln
命令。它应该突出更多细节。该项目有30多个项目,因此必须编辑每个项目并不理想。感谢您的建议。谢谢-此软件包需要安装在解决方案中的所有项目上,还是只安装在主项目(如web app)上?您可以安装一次,然后按照Library软件包管理器控制台中显示的说明进行操作。完成说明后,您可以再次卸载它。使用巧妙的解决方法将所需的“enablenUgetPackageStore”环境变量设置为build+1的一部分。在服务器上使用SET语句,并通过控制面板应用环境变量对我来说不起作用,但这确实起了作用:)一个Q@XavierDecoster-我为什么要再次卸载它?这不会重新中断生成吗?因为该软件包会将PowerShell脚本注入到您的NuGet PowerShell配置文件:)它不会中断生成,因为生成不依赖此软件包,而此软件包只在VS package Manager控制台中添加了一个新的PowerShell命令。为此感谢Sid-此解决方案对我有效,而Xavier的修复程序没有。这对我有效,因为我的msbuild服务器不在本地。我有一个20多个项目的解决方案,其中一个最近添加了一些自定义包(log4net、json.net),导致了这个问题。为我工作!谢谢!(提示:必须安装NuGetEnablePackageStore)
<?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>