首页 文章

NuGet包还原不适用于构建服务器

提问于
浏览
20

我已经在我的解决方案上设置了NuGet Package Restore,它在我的本地机器上运行良好 . 我按照这里提供的说明操作:

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

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

默认情况下禁用包还原 . 要同意,请打开Visual Studio选项对话框,单击程序包管理器节点并检查'Allow NuGet to download missing packages during build.'您也可以通过将环境变量'EnableNuGetPackageRestore'设置为'true'来同意 .

不幸的是,我无法访问构建服务器,因为它是在站点外控制的,因此无法更新环境变量 . 还有其他方法吗?我可以添加到解决方案文件或类似的任何东西,以允许包恢复?

9 回答

  • -2

    试试这个包:

    Install-Package NuGetEnablePackageRestore
    
  • 14

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

    我更喜欢将NuGet设置放在 <sln root>/.nuget/NuGet.targets 文件中,该文件受版本控制且位于单个位置 . 我对此进行了3次快速编辑 <sln root>/.nuget/NuGet.targets ,编辑后应如下所示:

    Change 1

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

    Change 2

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

    我的评论:尴尬的逻辑,但想到“要求同意不等于假必须是真实的”(原始)作为“要求同意等于真必须是真的”(翻译)并且将最后一部分改为“假”是有意义的(编辑)

    Change 3 :我还添加/取消注释了 <PackageSource ... > 标签,以删除任何依赖关系 .

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

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

    我变了:

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

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

  • 0

    在%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>
    
  • 0

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

    <RestorePackages Condition="  '$(RestorePackages)' == '' ">true</RestorePackages>
    
  • 0

    对于任何绊倒这个问题的人,寻找一种在构建服务器上恢复包的方法,NuGet Package Restore给出了当前选项的一个很好的概述 .

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

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

    nuget.exe可以从https://docs.nuget.org/consume/installing-nuget获得 . 我使用版本命令行实用程序最新3.X.

  • 0

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

    Install-NuGetEnablePackageRestoreFix

    然后运行Enable命令

    Install-Package NuGetEnablePackageRestore

  • 13

    安装包NuGetEnablePackageRestore

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

    • 重建解决方案

    • 清洁解决方案

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

    • 重建解决方案

相关问题