【问题标题】:Extracting Nupkg files using command line使用命令行提取 Nupkg 文件
【发布时间】:2013-05-11 08:06:32
【问题描述】:

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

我知道有一个名为 NuGet Package Explorer 的工具,它可以使用 gui 将 nupkg 文件导出到某个文件位置,但我希望设置一个 MSBuild 任务来运行和解压大约 50 个 .nupkg 文件,使用命令行。

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

【问题讨论】:

    标签: nuget


    【解决方案1】:

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

    【讨论】:

    • 有一个附带条件,即 NuGet 似乎对文件名进行了某种编码。因此,如果您使用 zip 工具,您最初命名为“A+B.txt”的文件将被提取为“A%2B.txt”。使用 nuget install 可以避免这种情况(根据安迪的回答)
    • 文件编码问题已在 4.7.0+ 中修复
    • github.com/NuGet/Home/issues/9459 链接到不编码文件名的一些副作用,还链接到 cmets 中更改它的原始问题,以供参考。注意:这是 Nuget 2.x 的兼容性问题
    【解决方案2】:

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

    nuget install MyPackage -Source %cd% -OutputDirectory packages
    

    将解压到目标目录。

    【讨论】:

    • 请注意,MyPackage 实际上是在 .nuspec 文件中指定的包 ID,而不是文件名。
    • 你必须从具有管理员权限的控制台执行它
    • Fwiw,在 powershell 中,命令如下所示: nuget install MyPackage -Source $pwd -OutputDirectory packages
    • 我猜 %cd% 指的是当前目录。如何在本地系统中引用不同的路径?当我使用路径时它不起作用。 "./example/path/"
    • 我使用文件目录的绝对路径来让 -Source 为我工作。我没有包含包名。
    【解决方案3】:

    将其重命名为 .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”
    

    【讨论】:

    • Dosent 这与上面提到的 Oli Wennell 有同样的问题吗?即例如“A+B.txt”将被提取为“A%2B.txt”?
    【解决方案5】:

    使用 PowerShell 5.1(包管理模块)

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

    【讨论】:

      【解决方案6】:

      这对我有用:

      Rename-Item -Path A_Package.nupkg -NewName A_Package.zip
      
      Expand-Archive -Path A_Package.zip -DestinationPath C:\Reference
      

      【讨论】:

      • 至少在 PS 7.1.2 中,您可以在不更改 MacOS 上的文件扩展名的情况下使用 Expand-Archive。
      • @Phatmandrake +1 你是对的,这应该是一个答案,我刚刚在 Big Sur + PS 7.1.3 上验证了自己
      【解决方案7】:

      我已经用 7-zip 扩展了 Zamarin.Essentials -version 1.6.1 并且 nuget 包管理器无法识别这个包,我将源设置为所有。 我也只尝试过我的全局包源。

      我还注意到包管理器将多个版本下载到同一个文件夹,想知道是否可以将版本文件夹放入包中并将包端复制到其中?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-17
        • 1970-01-01
        • 1970-01-01
        • 2010-11-21
        • 2018-08-18
        • 2015-02-28
        • 2012-12-08
        • 2016-05-01
        相关资源
        最近更新 更多