正在为依赖于另一个项目(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
我想念什么?
答案 0 :(得分:3)
我想在 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中,转到:
答案 2 :(得分:1)
程序包源处于离线状态!
我在系统上安装了VS2017 Professional,并打开了一个现有项目,发现缺少多个软件包。我尝试了所有可能的方法,而没有查看Package Source !!
当我尝试以下解决方案时,我正在写此答案,但是它们都不起作用:
解决方案:
步骤01。转到 Package Manager设置(工具> Nuget Package Manager> Package Manager设置)
步骤02 。检查包装来源。如您所见,包源已经在这里下载了SDK / nugets / packages。我不知道原因,但是在我的Visual Studio系统安装中缺少nuget.org的在线软件包源。
步骤03。安装nuget.org作为软件包源,然后“清除所有Nuget缓存”,然后还原软件包。错误将消失。
名称:nuget.org(或根据需要) 来源:https://api.nuget.org/v3/index.json
答案 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