2017-04-13 214 views
12

使用dotnet命令行工具,如何添加一个引用到现有的本地包是而不是与nuget下载?我曾尝试将本地软件包与dotnet一起添加到项目bardotnet添加包与本地包文件

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

foo.1.0.0.nupkg已经在不同的项目,dotnet pack创建的包。但是,命令dotnet add package尝试从https://api.nuget.org/下载文件foo.1.0.0.nupkg,这当然会失败。

回答

7

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

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

enter image description here

UPDATE:感谢@MartinUllrich answer:不要去碰只需安装一个.nupkg文件。在安装软件包之前,需要指定local feed并将本地.nupkg文件添加到Feed中。详情请参阅@MartinUllrich answer

不幸的是,你可以面对这个阻塞问题:

Package 'NameOfPackage' is incompatible with 'all' frameworks in project

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

+1

这不回答这个问题:你所描述的服用nupkg *已经在nuget存储库中并安装它;问题是,给定*只有一个foo.1.0.0.nupkg *你如何安装它。 – Doug

+1

@Doug您如何看待'-v | --version'选项来指定确切的软件包版本?是的,没有必要使用本地供稿来安装软件包。我在答案中提供了更多细节。 –

+0

我得到了同样的错误(与所有框架不兼容),但这似乎是'can not find package'的通用错误。例如,尝试'dotnet add package ADFADFDFVCXVZD -s ....'仍然会给出相同的错误。我不认为它是一个框架问题;我认为它只是找不到nupkg文件。即。我不认为这有效。 – Doug

15

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

要做到这一点,添加一个NuGet.Config文件添加目录作为饲料的位置,这样你就不必源参数添加到每个普吉相关命令(ESP dotnet restore):

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <packageSources> 
    <add key="local-packages" value="../foo/bin/Debug" /> 
    </packageSources> 
</configuration> 

或者在.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> 

这将使所有的命令可以使用该软件包:

  • 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

+1

这对我不起作用。 '..foo/bin/Debug'不包含nuspec文件,并且错误'与'项目中所有'框架'不兼容'就是我所得到的。我真的不认为使用随机文件夹作为软件包源与nuget 4一起工作(如果它曾经做过)。 – Doug

+0

nupkg,在这种情况下不是nuspec。它仍然有效,我有一个依赖它的回购(尽管在窗口和反斜杠路径)。请注意,nuget上有一个名为'foo'的软件包,所以您的应用程序很可能会与其发生冲突。使用'dotnet add package foo -v 1.0.0'来获取版本。 –

+0

还有一个例子在https://docs.microsoft.com/en-us/nuget/schema/nuget-config-file#package-source-sections –

3

一个小例子项目我已经与这个挣扎了很多,这是我能做到的唯一方法:

  • 创建一个新的“包源”使用

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

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

具体而言,您需要使用的命令是:

的NuGet添加../whatever/lib/MyPackage.1.0.0.nupkg - 源./packages

和:

dotnet的附加包MyPackage的-s ./packages

通知具体,几个点的位置:

  • 首先,你不能简单复制.nupkg到包文件夹,我试过很多的这种变化,而我可以说,它不适用于我,Windows,Mac或Linux。

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

  • 您在参考中。的csproj文件将是这样的:

... PackageReference包括= “SolidMud” 版本= “1.0.0” ......

IE浏览器。特别要注意的是,它没有在依赖信息中引用你的软件包源代码;只是包名和版本。

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

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

这里是恢复了一个名为“SolidMud” .nupkg进入一个全新的.Net核心控制台应用程序的一个具体,完整的例子:

$ 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'. 
+0

我不确定如何创建.nupkg文件? –

+0

@KevinBurton创建nuget包是一个完整的主题。如果您使用.Net核心或最新版本的nuget,请参阅https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-pack?tabs=netcore2x;你基本上可以使用'dotnet pack'或'nuget pack Foo.csproj';如果您使用的是完整的.Net,那么做起来会非常痛苦,但您必须四处寻找细节。 – Doug