sak*_*kra 34 c# nuget .net-core
使用dotnet
命令行工具,如何添加对未使用nuget下载的现有本地包的引用?我曾尝试添加本地包项目bar
有dotnet
.
$ dotnet add package /Users/sakra/foo/bin/Debug/foo.1.0.0.nupkg
Run Code Online (Sandbox Code Playgroud)
该包foo.1.0.0.nupkg
已dotnet pack
在不同的项目中创建.dotnet add package
但是,该命令尝试foo.1.0.0.nupkg
从https://api.nuget.org/下载该文件,该文件当然失败了.
Mar*_*ich 69
没有办法直接安装单个.nupkg
包.NuGet只能从源安装和恢复,因此您需要添加包所在的目录作为源.
为此,添加一个NuGet.Config
文件,将目录的位置添加为源,这样您就不必将source参数添加到每个与puget相关的命令(esp dotnet restore
):
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="local-packages" value="../foo/bin/Debug" />
</packageSources>
</configuration>
Run Code Online (Sandbox Code Playgroud)
或者在.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>
Run Code Online (Sandbox Code Playgroud)
这将使所有命令都能够使用该包:
dotnet add package foo
(可选添加-v 1.0.0
)dotnet restore
dotnet run
请注意,在开发期间,如果更改nuget包但不在生成nupkg的项目和使用它的项目中增加它的版本,则需要在再次恢复之前清除本地包缓存:
dotnet nuget locals all --clear
dotnet restore
Run Code Online (Sandbox Code Playgroud)
我在https://github.com/dasMulli/LocalNupkgExample上创建了一个小示例项目
Dou*_*oug 19
我经常为此苦苦挣扎,这是我能让它发挥作用的唯一方法:
创建一个要使用的新"包源"
使用,将.nupkg文件安装到包源中 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"版本="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'.
Run Code Online (Sandbox Code Playgroud)
小智 15
在.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
Run Code Online (Sandbox Code Playgroud)
并被~/.nuget/NuGet/NuGet.Config
改变。
使用-s|--source
选项指定包的位置文件夹.例如:
dotnet add package Microsoft.AspNetCore.Cors -s "d:\Cache\localfeed" -f netcoreapp1.1
Run Code Online (Sandbox Code Playgroud)
更新:感谢@MartinUllrich 回答:您不能简单地安装.nupkg
文件.在安装软件包之前,必须指定本地源并将本地.nupkg
文件添加到源.查看@MartinUllrich 答案了解详情.
不幸的是,您可能遇到此阻塞问题:
包'NameOfPackage'与项目中的'all'框架不兼容
此时它是开放的,我能够在稳定的包版本上重现它.
归档时间: |
|
查看次数: |
22625 次 |
最近记录: |