如何解决“找不到包”的nuget错误

时间:2018-09-17 22:40:41

标签: nuget nuspec

正在为依赖于另一个项目(B.csprojec)的项目(A.csproj)创建nuget pkg。
这是.nuspec,

<?xml version="1.0"?>
<package >
  <metadata>
    <id>A.Client</id>
    <title>A.Client</title>
    <description>HttpClient and Models for calling the A Microservice.</description>
    <version>1.0.2</version>
    <authors></authors>
    <owners></owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <copyright>.</copyright>
    <tags></tags>
    <dependencies>
      <group targetFramework=".NETFramework4.5">
        <dependency id="Newtonsoft.Json" version="9.0.1" exclude="Build,Analyzers" />
        // <dependency id="B" version="1.0.0"/> tried this but same error
      </group>
      <group targetFramework=".NETStandard2.0">
        <dependency id="Newtonsoft.Json" version="9.0.1" exclude="Build,Analyzers" />
        // <dependency id="B" version="1.0.0"/> tried this but same error
      </group>
    </dependencies>
    <frameworkAssemblies>
      <frameworkAssembly assemblyName="System.Net.Http" targetFramework=".NETFramework4.5" />
    </frameworkAssemblies>
  </metadata>
  <files>
    <file src="bin\$configuration$\netstandard2.0\A.dll" target="lib\netstandard2.0" />
    <file src="bin\$configuration$\net45\A.dll" target="lib\net45" />
  </files>
</package>

我用过

nuget pack A.nuspec -Properties configuration=debug

生成包。但是,当我尝试在c.csprojc中使用此程序包时,出现以下错误

Severity    Code    Description Project File    Line    Suppression State
Error   NU1101  Unable to find B. No packages exist with this id in source(s): Local Package source, Microsoft Visual Studio Offline Packages, nuget.org, Package source    

我想念什么?

8 个答案:

答案 0 :(得分:3)

GitHub 操作

我想在 Github Actions 中补充一点,默认情况下不会查询 nuget.org 存储库。相反,GitHub 默认使用缓存的包存储库,并且可能会发生您引用的包不在该缓存中,而是在 nuget.org 上(我为 System.CommandLine 使用过)。

您可以通过将 nuget.config 文件添加到包含以下内容的根目录来解决此问题

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
  </packageSources>
</configuration>

示例 github_action.yml 文件

name: .NET

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:

    runs-on: windows-latest

    steps:
    - uses: actions/checkout@v2
    - name: Setup .NET
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: 5.0
    - name: Clean
      run: dotnet clean && dotnet nuget locals all --clear
    - name: Restore dependencies
      run: dotnet restore
    - name: Build
      run: dotnet build --no-restore
    - name: Test
      run: dotnet test --no-build --verbosity normal

答案 1 :(得分:1)

我刚刚做到了,一切顺利。在您的Visual Studio中,转到:

  1. 工具
  2. Nuget软件包管理器
  3. 常规
  4. 点击按钮“清除所有Nuget缓存
  5. 打包资源,然后单击“更新”
  6. 哇!错误消失了...

答案 2 :(得分:1)

程序包源处于离线状态!

我在系统上安装了VS2017 Professional,并打开了一个现有项目,发现缺少多个软件包。我尝试了所有可能的方法,而没有查看Package Source !!

Manage Nuget Packages for Solution

当我尝试以下解决方案时,我正在写此答案,但是它们都不起作用:

  1. 清除缓存
  2. 还原或重新安装软件包
  3. 更改targetFramework
  4. 更新Nuget软件包管理器

解决方案

步骤01。转到 Package Manager设置(工具> Nuget Package Manager> Package Manager设置) Nuget Package Manager > Package Manager Settings

步骤02 。检查包装来源。如您所见,包源已经在这里下载了SDK / nugets / packages。我不知道原因,但是在我的Visual Studio系统安装中缺少nuget.org的在线软件包源。

enter image description here

步骤03。安装nuget.org作为软件包源,然后“清除所有Nuget缓存”,然后还原软件包。错误将消失。

名称:nuget.org(或根据需要) 来源:https://api.nuget.org/v3/index.json

enter image description here

答案 3 :(得分:1)

对我来说

:仅包含%appdata%\ NuGet \ NuGet.Config 100%|██████████| 10/10 [00:01<00:00, 8.99it/s] -------------------- 100%|██████████| 10/10 [00:01<00:00, 8.98it/s] {'n': 10, 'total': 10, 'elapsed': 1.1145293712615967, 'ncols': None, 'nrows': None, 'prefix': '', 'ascii': False, 'unit': 'it', 'unit_scale': False, 'rate': None, 'bar_format': None, 'postfix': None, 'unit_divisor': 1000, 'initial': 0, 'colour': None}

完成后

nuget sources add -Name "NuGet official package source" -Source "https://api.nuget.org/v3/index.json"

已添加

  <packageSources>
    <add key="https://www.nuget.org/api/v2/" value="https://www.nuget.org/api/v2/" />
    <add key="NuGet official package source" value="https://api.nuget.org/v3/index.json" />
  </packageSources>

随后发现了包裹。

答案 4 :(得分:0)

我通过添加相关文件解决了这个问题

<files>
    <file src="bin\$configuration$\netstandard2.0\a.dll" target="lib\netstandard2.0" />
    <file src="bin\$configuration$\net45\a.dll" target="lib\net45" />
    <file src="bin\$configuration$\netstandard2.0\b.dll" target="lib\netstandard2.0" />
    <file src="bin\$configuration$\net45\b.dll" target="lib\net45" />
  </files>

此外,不要忘记清理本地缓存nuget locals all –clean或更改版本。

答案 5 :(得分:0)

我能够通过在nuget软件包源中添加更多软件包源链接来解决此问题(工具-> Nuget软件包管理器->软件包管理器设置->软件包源)。

在尝试上述解决方案之前,我尝试过清除nuget缓存,更新targetFramework,重新安装软件包,更新软件包管理器,但没有一个起作用。

答案 6 :(得分:0)

开始为我们的 Azure DevOps 构建管道偶尔出现这些错误,但从未在本地出现。

示例错误:

<块引用>

错误 NU1101:无法找到包 Microsoft.EntityFrameworkCore.Sqlite。不存在具有此 ID 的包 来源:Microsoft Visual Studio 离线包

如果我们重新启动构建它可以工作,但它又发生了。

然后我注意到它总是发生在我们的测试项目中,而不是我们的主 Web 项目中。

我们使用 .NET/NuGet 管道缓存来加速我们的构建。我们使用如下所示的默认版本:

variables:
  NUGET_PACKAGES: $(Pipeline.Workspace)/.nuget/packages

steps:
- task: Cache@2
  inputs:
    key: 'nuget | "$(Agent.OS)" | **/packages.lock.json,!**/bin/**'
    restoreKeys: |
       nuget | "$(Agent.OS)"
    path: $(NUGET_PACKAGES)
  displayName: Cache NuGet packages

https://docs.microsoft.com/en-us/azure/devops/pipelines/release/caching?view=azure-devops#netnuget

唯一的变化是 Microsoft 使用 $(UserProfile),但我们使用 $(Pipeline.Workspace) 作为变量。使用 $(UserProfile) 时出错,您可以在此处阅读更多信息:

https://github.com/MicrosoftDocs/azure-devops-docs/issues/10110

它读取需要通过编辑您的项目文件 (.csproj) 来启用的 packages.lock.json

<PropertyGroup>
    <RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
</PropertyGroup>

https://devblogs.microsoft.com/nuget/enable-repeatable-package-restores-using-a-lock-file/

结果我们只为我们的网络项目生成了一个 packages.lock.json,而不是我们的测试项目。将 RestorePackagesWithLockFile 添加到我们的测试项目后,它又开始工作了。

答案 7 :(得分:0)

我遇到了一个类似的问题,我定义了多个包源,并且 api.nuget.org 由于另一个源中的失败而没有被命中。我通过使用 --ignore-failed-sources 选项缓解了这种情况,例如:

dotnet tool install -g dotnet-ef --ignore-failed-sources

输出:

C:\Program Files\dotnet\sdk\5.0.302\NuGet.targets(131,5): warning NU1801: Unable to load the service index for source [[REDACTED]]. [c:\temp\3iqdpc5w.qpj\restore.csproj]
You can invoke the tool using the following command: dotnet-ef
Tool 'dotnet-ef' (version '5.0.8') was successfully installed.

已通过以下方式验证安装:

dotnet tool list -g

输出:

Package Id      Version      Commands 
--------------------------------------
dotnet-ef       5.0.8        dotnet-ef