解压构建时创建的 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 install
或 packages.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
是我想要的。
我正在尝试解压在构建过程中创建的 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 install
或 packages.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
是我想要的。