dotnet使用本地包文件添加包

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

  $ dotnet add package /Users/sakra/foo/bin/Debug/foo.1.0.0.nupkg 

已在不同项目中使用dotnet pack创建了包foo.1.0.0.nupkg 。 然而,命令dotnet add package尝试从https://api.nuget.org/下载文件foo.1.0.0.nupkg ,这当然失败了。

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

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

       

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

  $(RestoreSources);../foo/bin/Debug;https://api.nuget.org/v3/index.json  

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

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

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

 dotnet nuget locals all --clear dotnet restore 

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

我已经很努力 ,这是我能让它发挥作用的唯一方法:

  • 创建一个新的’包源’来使用

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

  • 使用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'. 

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

 dotnet add package Microsoft.AspNetCore.Cors -s "d:\Cache\localfeed" -f netcoreapp1.1 

在此处输入图像描述

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

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

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

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