如何解决;找不到程序包“;nuget错误

如何解决;找不到程序包“;nuget错误,nuget,nuspec,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

正在为依赖于作为项目参考添加的另一个项目(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>
以生成包。然而,当我试图在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    

我错过了什么

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

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


另外,不要忘了清理本地缓存
numget locals all–clean
或更改版本。

我刚刚做了这件事,一切顺利。在Visual Studio中,转到:

  • 工具
  • Nuget包管理器
  • 一般的
  • 单击按钮“清除所有Nuget缓存”
  • 打包资源并单击“更新”
  • 乌拉!错误消失了

  • 包源已脱机!!

    我在我的系统上安装了VS2017 professional,打开了一个现有的项目,发现缺少多个软件包。我尝试了我所能做的一切,但没有查看软件包的来源

    我在尝试以下解决方案时写下了这个答案,但没有一个有效:

  • 清除缓存
  • 正在还原或重新安装包
  • 改变targetFramework
  • 更新Nuget包管理器

  • 解决方案

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

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

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

    名称:nuget.org(或如您所愿) 资料来源:


    我可以通过在nuget package source(工具->nuget package Manager->package Manager设置->package source)中添加几个包源链接来解决这个问题


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

    对于我来说:%appdata%\nuget\nuget.Config仅包含
    
    

    之后

    nuget sources add -Name "NuGet official package source" -Source "https://api.nuget.org/v3/index.json" nuget源添加-名称“nuget官方包源”-源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>
    后来发现了包。

    开始为我们的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
    

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

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

    
    真的
    

    事实证明,我们只为我们的web项目生成了一个
    packages.lock.json
    ,而不是我们的测试项目。在将
    RestorePackagesWithLockFile
    添加到我们的测试项目之后,它又开始工作了。

    GitHub Actions 我想补充一点,在Github操作中,默认情况下不会查询nuget.org存储库。相反,Github默认为缓存的包存储库,您引用的包可能不在该缓存中,而是在nuget.org上(我有这个功能)

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

    
    
    github_action.yml文件示例

    名称:.NET
    关于:
    推送:
    分支机构:[硕士]
    拉拽请求:
    分支机构:[硕士]
    工作:
    建造:
    运行于:windows最新版本
    步骤:
    -用途:行动/checkout@v2
    -名称:Setup.NET
    用途:操作/设置-dotnet@v1
    与:
    dotnet版本:5.0
    -姓名:清洁
    运行:dotnet clean&&dotnet nuget locals all--clear
    -名称:还原依赖项
    运行:dotnet还原
    -名称:Build
    运行:dotnet构建--无恢复
    -名称:测试
    运行:dotnet测试--无构建--详细性正常
    
    是否生成了包B?错误表明包B未生成或无法从包含包A的目录中获得。您使用的
    nuget-pack
    命令仅提到A.nuspec.A和B.csproj在同一解决方案中,引用的B是项目,而不是包。是否尝试了
    -IncludeReferencedProjects
    选项使用
    nuget pack
    时打开?设置包源url:在工具->nuget包管理器->包管理器设置(包源选项卡)下这正是我的解决方案。我不知道为什么VS安装程序会将nuget.org url作为包源排除在外,你会认为它会作为默认源被包括在内。谢谢。这对我来说是个问题,你为我指出了一个确切的解决方案,在我找到这个页面之前,我经历了几天的痛苦。谢谢,谢谢。我刚刚开始g在几年后回到Visual Studio,出现了一些错误。找到了一些我不理解的答案,或者说这似乎是一个糟糕的解决方法。找到了你的答案,它很有意义并且有效!现在我可以开始编写代码了!对于任何在Azure构建中遇到此问题的人,这个开放的Azure DevOps问题提供了一个答案
    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
    
    <PropertyGroup>
        <RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
    </PropertyGroup>