使用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
,这当然会失败。
答案 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
创建了一个小示例项目
答案 1 :(得分:13)
我一直在努力解决很多,这是我能让它发挥作用的唯一方法:
创建一个新的“包源”以使用
使用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”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
更新:感谢@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"]