dotnet使用本地包文件添加包

sak*_*kra 34 c# nuget .net-core

使用dotnet命令行工具,如何添加对使用nuget下载的现有本地包的引用?我曾尝试添加本地包项目bardotnet.

 $ dotnet add package /Users/sakra/foo/bin/Debug/foo.1.0.0.nupkg 
Run Code Online (Sandbox Code Playgroud)

该包foo.1.0.0.nupkgdotnet pack在不同的项目中创建.dotnet add package但是,该命令尝试foo.1.0.0.nupkghttps://api.nuget.org/下载该文件,该文件当然失败了.

Mar*_*ich 69

没有办法直接安装单个.nupkg包.NuGet只能从源安装和恢复,因此您需要添加包所在的目录作为源.

为此,添加一个NuGet.Config文件,将目录的位置添加为源,这样您就不必将source参数添加到每个与puget相关的命令(esp dotnet restore):

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="local-packages" value="../foo/bin/Debug" />
  </packageSources>
</configuration>
Run Code Online (Sandbox Code Playgroud)

或者在.NET Core 2.0工具/ NuGet 4.3.0中,您也可以将源直接添加到应该使用NuGet的csproj文件中:

<PropertyGroup>
  <RestoreSources>$(RestoreSources);../foo/bin/Debug;https://api.nuget.org/v3/index.json</RestoreSources>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

这将使所有命令都能够使用该包:

  • dotnet add package foo(可选添加-v 1.0.0)
  • dotnet restore
  • dotnet run

请注意,在开发期间,如果更改nuget包但不在生成nupkg的项目和使用它的项目中增加它的版本,则需要在再次恢复之前清除本地包缓存:

dotnet nuget locals all --clear
dotnet restore
Run Code Online (Sandbox Code Playgroud)

我在https://github.com/dasMulli/LocalNupkgExample上创建了一个小示例项目

  • 这对我不起作用。`..foo / bin / Debug`不包含nuspec文件,我得到的错误是'与“项目中的所有”框架不兼容。我真的不认为使用随机文件夹作为包源在nuget 4上会更好(如果有的话)。 (2认同)
  • 我在 https://github.com/dasMulli/LocalNupkgExample 创建了一个小示例项目,您可以使用 `./run-example.sh` 运行它 (2认同)
  • 我注意到在您的示例中,您在 csproj 文件中*两个*都有 Nuget.config 文件*和*一个 RestoreSources 块。在您的讨论中,您提到 RestoreSources 是 Nuget.config 文件的替代方案。RestoreSources 块是否与 Nuget.config 文件一起使用? (2认同)

Dou*_*oug 19

我经常为此苦苦挣扎,这我能让它发挥作用的唯一方法:

  • 创建一个要使用的新"包源"

  • 使用,将.nupkg文件安装到包源中 nuget add ...

  • 使用dotnet add package Foo -s ...安装软件包.

具体来说,您需要使用的命令是:

nuget add ../whatever/lib/MyPackage.1.0.0.nupkg-Source ./packages

和:

dotnet add package MyPackage -s ./packages

特别注意,这里有几点:

  • 首先,你不能简单地将.nupkg复制到packages文件夹中,我已经尝试了很多这方面的变化,我只能说它对我,在windows,mac或linux上都不起作用.

  • 必须使用至少3+的nuget版本,否则这不起作用.在撰写本文时,.net核心的默认版本是2.xx.您需要手动升级nuget.

  • 您在.csproj文件中的引用如下所示:

... PackageReference Include ="SolidMud"版本="1.0.0"......

IE浏览器.特别注意,它不会在依赖项信息中引用您的包源; 只是包名和版本.

基本上这意味着如果你运行dotnet restore它将无法工作,除非包被缓存在该机器上的全局nuget缓存中; 您需要dotnet restore -s ./packages在第一次执行还原时运行.

正如另一个答案中所提到的,包是全局缓存的; 如果要滚动到具有相同版本ID的新版本,则需要使用dotnet nuget locals all --clear或手动删除缓存的包版本.

以下是将名为"SolidMud"的.nupkg恢复到全新.Net Core控制台应用程序中的具体完整示例:

$ dotnet new console -n TestPkgs
The template "Console Application" was created successfully.

Processing post-creation actions...
Running 'dotnet restore' on TestPkgs/TestPkgs.csproj...
Restore succeeded.

$ cd TestPkgs/
$ mkdir packages
$ nuget add ../core-solidmud/lib/SolidMud.1.0.0.nupkg -Source ./packages
Installing SolidMud 1.0.0.
Successfully added package '../core-solidmud/lib/SolidMud.1.0.0.nupkg' to feed './packages'.

$ dotnet add package SolidMud -s ./packages
Microsoft (R) Build Engine version 15.3.117.23532
Copyright (C) Microsoft Corporation. All rights reserved.

Writing /var/folders/29/0695l4fj26j64kp4p8vwqq5h0000gn/T/tmpkRBaST.tmp
info : Adding PackageReference for package 'SolidMud' into project '/Users/doug/dev/dotnet-packages/TestPkgs/TestPkgs.csproj'.
log  : Restoring packages for /Users/doug/dev/dotnet-packages/TestPkgs/TestPkgs.csproj...
info : Package 'SolidMud' is compatible with all the specified frameworks in project '/Users/doug/dev/dotnet-packages/TestPkgs/TestPkgs.csproj'.
info : PackageReference for package 'SolidMud' version '1.0.0' added to file '/Users/doug/dev/dotnet-packages/TestPkgs/TestPkgs.csproj'.
Run Code Online (Sandbox Code Playgroud)


小智 15

在.NET Core 3.1(Arm64)中,我可以通过以下方式添加本地源和包

dotnet nuget add source ~/my/nuget-packages/
mv mypackage.1.1.1.nuget ~/my/nuget-packages/
dotnet add package mypackage
Run Code Online (Sandbox Code Playgroud)

并被~/.nuget/NuGet/NuGet.Config改变。


Ily*_*kov 8

使用-s|--source 选项指定包的位置文件夹.例如:

dotnet add package Microsoft.AspNetCore.Cors -s "d:\Cache\localfeed" -f netcoreapp1.1
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

更新:感谢@MartinUllrich 回答:您不能简单地安装.nupkg文件.在安装软件包之前,必须指定本地源并将本地.nupkg文件添加到源.查看@MartinUllrich 答案了解详情.

不幸的是,您可能遇到此阻塞问题:

包'NameOfPackage'与项目中的'all'框架不兼容

此时它是开放的,我能够在稳定的包版本上重现它.

  • 这并没有回答这个问题:您正在描述获取一个 nupkg *已经在 nuget 存储库中*并安装它;问题是,给定 *只有 foo.1.0.0.nupkg* 如何安装它。 (2认同)