如何解决“无法找到包”nuget 错误

yes*_*can 30 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>
Run Code Online (Sandbox Code Playgroud)

我用了

nuget pack A.nuspec -Properties configuration=debug
Run Code Online (Sandbox Code Playgroud)

生成包。但是,当我尝试在 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    
Run Code Online (Sandbox Code Playgroud)

我错过了什么 ?

jai*_*ish 79

包源下线!!

我在我的系统上安装了 VS2017 Professional 并打开一个现有项目,发现缺少多个包。我尽我所能,没有查看包源!

管理解决方案的 Nuget 包

我正在写这个答案,因为我尝试了以下解决方案,但都没有奏效:

  1. 清除缓存
  2. 恢复或重新安装软件包
  3. 改变目标框架
  4. 更新 Nuget 包管理器

解决方案

步骤 01。转到包管理器设置(工具 > Nuget 包管理器 > 包管理器设置) Nuget 包管理器 > 包管理器设置

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

在此处输入图片说明

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

名称:nuget.org(或如您所愿)来源:https ://api.nuget.org/v3/index.json

在此处输入图片说明

  • 这正是我的解决方案。我不知道为什么 VS 安装程序会排除 nuget.org url 作为包源,您可能会认为它会作为默认源包含在内。 (5认同)
  • 曾在 VS2022 Nuget 包管理器中工作 (4认同)
  • 谢谢。这对我来说是一个问题,你为我指出了一个确切的解决方案,我花了几天时间才找到这个页面。 (3认同)
  • 这是我在新的 Windows 11 开发机器上全新安装 VS 2022 时遇到的问题。 (3认同)
  • 答对了。这确实是令人无法接受的 MS 团队,因为奇怪的是没有 nuget 源集。我希望这只是一个错误,但现在是 2021 年了,我正在评论 2019 年的评论。作为一名经验丰富的.NET开发人员,在需要完整系统重装时,完全安装了VStudio 2019 Pro最新版本,手动安装了.NET Framework 4.8和dotnet core 5.0和3版本(dot.net),但仍然有这个问题?!这怎么可能呢?令人难以置信的是他们默认有这个设置。很抱歉抱怨,但这不利于领养。 (2认同)
  • 我在 VS 2022 中遇到了同样的问题。感谢 @jainashish 提供了此分步解决方案。 (2认同)

sot*_*tto 17

对我来说,%appdata%\NuGet\NuGet.Config仅包含

<activePackageSource>
  <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
</activePackageSource>
Run Code Online (Sandbox Code Playgroud)

做完之后

nuget sources add -Name "NuGet official package source" -Source "https://api.nuget.org/v3/index.json"
Run Code Online (Sandbox Code Playgroud)

这是添加的

<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>
Run Code Online (Sandbox Code Playgroud)

后来发现了包裹。


JBS*_*rro 10

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>
Run Code Online (Sandbox Code Playgroud)

示例 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
Run Code Online (Sandbox Code Playgroud)


Isr*_*ina 8

我只是这样做了,一切顺利。在您的 Visual Studio 中,转到:

  1. 工具
  2. Nuget 包管理器
  3. 一般的
  4. 单击按钮“清除所有 Nuget 缓存”
  5. 打包资源并点击“更新”
  6. 哇!错误消失了...

  • 我的问题是需要关闭并重新打开视觉工作室并再次执行这些步骤。 (2认同)

ala*_*lal 6

我有类似的问题。它找不到这些软件包,因为它正在寻找离线存储在我的计算机中而不是在线存储的软件包。Visual Studio NuGet 设置屏幕没有显示此内容,但错误消息显示了。我对离线包不感兴趣,所以要解决它(Windows):

首先转到 Visual Studio 2019 中的“工具”>“Nuget 包管理器”>“包管理器设置”>“包源”并添加:https://api.nuget.org/v3/index.json(如果尚未存在),请提供名称 nuget.org。这样做后我的错误仍然存​​在,因此接下来的步骤。

按开始并输入 %appdata% 将您带到 C:/Users/[用户名]/AppData/Roaming。导航到 NuGet 目录并打开 NuGet.Config。

所有包源都显示在此处,即使它们未出现在 Visual Studio 包管理器设置中也是如此。

修改 PackageSources 部分以删除不需要的源。就我而言,我不需要离线源,所以我只剩下:

<packageSources>
  <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
</packageSources>
Run Code Online (Sandbox Code Playgroud)

这为我解决了这个问题。


yes*_*can 0

我通过添加依赖文件解决了这个问题

\n\n
<files>\n    <file src="bin\\$configuration$\\netstandard2.0\\a.dll" target="lib\\netstandard2.0" />\n    <file src="bin\\$configuration$\\net45\\a.dll" target="lib\\net45" />\n    <file src="bin\\$configuration$\\netstandard2.0\\b.dll" target="lib\\netstandard2.0" />\n    <file src="bin\\$configuration$\\net45\\b.dll" target="lib\\net45" />\n  </files>\n
Run Code Online (Sandbox Code Playgroud)\n\n

另外,不要忘记清理本地缓存nuget locals all \xe2\x80\x93clean或更改版本。

\n