使用命令行提取Nupkg文件


105

首先,在处理某些.nupkg文件时,我根本不想使用Visual Studio。

我知道有一个名为NuGet包资源管理器的工具,它可以使用gui将nupkg文件导出到某个文件位置,但是我希望通过命令行使用MSBuild任务来运行和解压缩大约50个.nupkg文件。

我的问题是,是否可以通过命令行使用将.nupkg文件解压缩到指定文件位置的工具?

Answers:


106

您还可以通过指定本地主机作为安装的一部分来使用NuGet命令行。例如,如果您的软件包存储在当前目录中

nuget install MyPackage -Source %cd% -OutputDirectory packages

将其解压缩到目标目录。


14
请注意,MyPackage实际上是.nuspec文件中指定的包ID,而不是文件名。
Rod

并且您必须使用管理员权限从控制台执行它
Sonic Soul

7
首先,在powershell中,命令如下所示:nuget install MyPackage -Source $ pwd -OutputDirectory软件包
Mark Boltuc

我猜%cd%是指当前目录。如何在本地系统中引用不同的路径?使用路径时它不起作用。“ ./example/path/”
seanbun

1
我使用了文件目录的绝对路径来使-Source对我有用。我没有提供包裹名称。
mac10688 '18

146

NuPKG文件只是zip文件,因此任何可以处理zip文件的文件都应该能够处理nupkg文件,即7zip。


15
有一个附带条件,即NuGet似乎对文件名进行某种编码。因此,如果您使用的是zip工具,则原来名为“ A + B.txt”的文件将被提取为“ A%2B.txt”。通过使用nuget install可以避免这种情况(按照Andy的回答)
Oli Wennell

1
文件编码问题已在4.7.0+中得到解决
Fai

15

将其重命名为.zip,然后将其压缩。


这是一个非常老的问题,如果您将其更改为无法回答该问题的zip,则如果您使用zip工具,则原来名为“ A + B.txt”的文件将被提取为“ A” %2B.txt”-您也不需要将其重命名为zip。
刘易斯

4

做这样的事情:

clear
cd PACKAGE_DIRECTORY

function Expand-ZIPFile($file, $destination)
{
    $shell = New-Object -ComObject Shell.Application
    $zip = $shell.NameSpace($file)
    foreach($item in $zip.items())
    {
        $shell.Namespace($destination).copyhere($item)
    }
}

Dir *.nupkg | rename-item -newname {  $_.name  -replace ".nupkg",".zip"  }

Expand-ZIPFile "Package.1.0.0.zip" “DESTINATION_PATH”

2
这是否遭受与上述Oli Wennell相同的问题?即例如“ A + B.txt”将被提取为“ A%2B.txt”吗?
Rahatur '16

1

使用PowerShell 5.1(PackageManagement模块)

Install-Package -Name MyPackage -Source (Get-Location).Path -Destination C:\outputdirectory

0

这对我有用:

Rename-Item -Path A_Package.nupkg -NewName A_Package.zip

Expand-Archive -Path A_Package.zip -DestinationPath C:\Reference
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.