NuGet包还原在生成服务器上不起作用
我已经在我的解决方案上设置了NuGet Package Restore,它在我的本地机器上运行良好。我遵循此处提供的说明: 我遇到的问题是在生成服务器上发生以下错误: 默认情况下禁用包还原。若要给予同意,请打开Visual Studio选项对话框,单击“包管理器”节点并选中“允许NuGet在生成期间下载丢失的包”。您还可以通过将环境变量“enablenUgetPackageStore”设置为“true”给予同意NuGet包还原在生成服务器上不起作用,nuget,nuget-package,Nuget,Nuget Package,我已经在我的解决方案上设置了NuGet Package Restore,它在我的本地机器上运行良好。我遵循此处提供的说明: 我遇到的问题是在生成服务器上发生以下错误: 默认情况下禁用包还原。若要给予同意,请打开Visual Studio选项对话框,单击“包管理器”节点并选中“允许NuGet在生成期间下载丢失的包”。您还可以通过将环境变量“enablenUgetPackageStore”设置为“true”给予同意 不幸的是,我没有访问构建服务器的权限,因为它是非现场控制的,所以无法更新环境变量。
不幸的是,我没有访问构建服务器的权限,因为它是非现场控制的,所以无法更新环境变量。还有别的办法吗?我可以向解决方案文件或类似文件中添加任何允许包还原的内容?我可能可以尝试在.nuget\nuget.targets文件中将RestorePackages属性设置为true:
<RestorePackages Condition=" '$(RestorePackages)' == '' ">true</RestorePackages>
true
试试这个软件包:
Install-Package NuGetEnablePackageRestore
-转到工具->库包管理器->包还原->取消选中“允许NuGet下载丢失的包”和“自动检查…”
- 重建解决方案
- 清洁溶液
- 现在选中“允许NuGet下载丢失的软件包”和“自动检查…”
- 重建解决方案
.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>