如何解决;找不到程序包“;nuget错误
正在为依赖于作为项目参考添加的另一个项目(B.csprojec)的项目(a.csproj)创建nuget pkg。如何解决;找不到程序包“;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
这是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中,转到:
包源已脱机!! 我在我的系统上安装了VS2017 professional,打开了一个现有的项目,发现缺少多个软件包。我尝试了我所能做的一切,但没有查看软件包的来源 我在尝试以下解决方案时写下了这个答案,但没有一个有效:
解决方案: 步骤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>