dotnet使用本地包文件添加包

时间:2017-04-13 19:16:00

标签: c# nuget .net-core

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

 $ 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,这当然会失败。

5 个答案:

答案 0 :(得分:49)

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

要执行此操作,请添加NuGet.Config文件,将目录的位置添加为Feed,这样您就不必将source参数添加到每个与puget相关的命令(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 :(得分:13)

我一直在努力解决很多,这是我能让它发挥作用的唯一方法:

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

  • 使用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”Version =“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'.

答案 2 :(得分:5)

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

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

enter image description here

更新:感谢@MartinUllrich answer:您无需安装.nupkg文件。在安装软件包之前,有必要指定local feed并在Feed中添加本地.nupkg文件。查看@MartinUllrich answer了解详情。

不幸的是,你可能会面临这个阻塞问题:

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

此时它已打开,我可以在稳定的软件包版本上重现它。

答案 3 :(得分:1)

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

~/.nuget/NuGet/NuGet.Config已更改。

答案 4 :(得分:0)

我想我会把这个 Dockerfile 放在这里,以防有人想要一个额外的例子。我的私有/本地 nuget 包存在于目录 ./packages 中,其中包含所有必需的 *.nupkg 文件

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base

RUN apt-get update && apt-get install -y gcc-multilib && apt-get install -y libcurl3-gnutls
WORKDIR /app
EXPOSE 2275
EXPOSE 44303

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src

COPY . .
WORKDIR /src/SampleWebApp
RUN dotnet nuget add source /src/packages
RUN dotnet restore
RUN dotnet build -c Release -o /app

FROM build AS publish
RUN dotnet publish -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .

EXPOSE 80
ENTRYPOINT ["dotnet", "SampleWebApp.dll"]