解压构建时创建的 NuGet 包

UnPack NuGet package that gets created on build

我正在尝试解压在构建过程中创建的 nuget 包。

我的 Directory.Build.props 文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<Project>
    <PropertyGroup>
        <RestorePackagesPath>C:\packages</RestorePackagesPath>
    </PropertyGroup>
    <PropertyGroup>
        <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
        <PackageOutputPath>C:\LocalNuGetPackages</PackageOutputPath>
    </PropertyGroup>
    <PropertyGroup>
        <Version>1.0.0.1</Version>
    </PropertyGroup>
    <Target Name="UnPack" AfterTargets="Pack">
        <Exec Command="nuget install $(PackageId) -Version $(PackageVersion) -Source C:\LocalNuGetPackages -OutputDirectory C:\packages" />
    </Target>
</Project>

但这给出了与 Visual Studio 不同的目录结构。

Visual Studio 生成以下目录

C:\packages$(PackageId)$(PackageVersion)\

但是使用的命令 (nuget install) 产生了

C:\packages$(PackageId).$(PackageVersion)\

有没有办法调用 Visual Studio“内部”nuget 来获得相同的目录结构,或者我是否缺少启用此结构的参数? 目前,我正在使用此处 https://www.nuget.org/downloads 中的 nuget.exe,我已将其添加到我的系统变量中的 PATH。

旁注,我并没有尝试将 NuGet 包安装到任何项目,我只是想像 Visual Studio 那样解压它。

就是这样设计的。全局 nuget 缓存总是使 nuget 路径像 package_id/version/xxx。这就是 VS IDE 将 NuGet 包解压到全局缓存机制中的方式。

而当你使用 nuget installpackages.config 解决方案文件夹下的 packages 文件夹时,它实际上喜欢 package_id.version/xxx

这种差异不是我们可以处理的,可以属于设计本身。所以我有 reported the issue to the Team.

如果我没有详细描述,您可以投票并添加任何评论。希望能尽快解决你的困惑

正如在@Perry 创建的 github issue 中所指出的,我实际上正在寻找的命令是

nuget add "C:\LocalNuGetPackages\castle.core.4.4.0.nupkg" -Source C:\packages -expand

而不是

nuget install castle.core -Version 4.4.0 -Source C:\LocalNuGetPackages -OutputDirectory C:\packages

add 命令无法从“源”(例如 NuGet.org 或 C:\LocalNuGetPackages)获取 nuget 包,您已经需要下载 *.nupkg并准备好打开包装。

但是这种能力的缺乏与我的情况无关,因为在构建时我正在创建 *.nupkg 并且它们是我要解压的。

不要与 add 中调用的参数 -Source 混淆,它实际上等同于 install 命令的 -OutputDirectory

所以对于其他 users/cases 来说,希望 install 命令执行不同的目录结构,但对我来说 add 是我想要的。