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’框架不兼容
此时它是开放的,我能够在稳定的包版本上重现它。
- Json post int类型总是0
- hosting.json有什么意义,因为appsettings.json就足够了
- Apache Ignite.NET SQL不搜索非英文字符
- 在没有Microsoft.Office.Interop的情况下,将.NET doc和docx格式转换为.NET Core中的PDF
- 在.NET Core中使用Reflection
- 如何在.NET Core项目中引用.NET Framework项目?
- 添加迁移失败,因为未安装EntityFrameworkCore.Tools
- .NET Core中的Assembly.GetEntryAssembly()相当于什么?
- 通过.NET Core上的MEF将参数传递给插件构造函数?