【问题标题】:What is the path of the nuget package i just installed我刚刚安装的nuget包的路径是什么
【发布时间】:2021-08-25 23:01:35
【问题描述】:

鉴于我刚刚在解决方案或项目文件夹之外使用 nuget(使用 powershell)安装了最新版本的包,例如PS> nuget install octopustools 然后在当前文件夹下创建一个目录,在本例中为 \OctopusTools.4.22.1

我想访问具有相对路径\OctopusTools.4.22.1\tools\octo.exe 的包内的exe。但是我想要一种简单的方法来了解我的脚本中的路径,因为版本号可能会根据版本而改变。

是否有简单的方法让 nuget 告诉我它刚刚安装到的文件夹的名称,即 OctopusTools.4.22.1?

如果可能,我想避免基于递归扫描文件夹或硬编码版本号来猜测路径。 docs 似乎没有提供任何明显的功能?

【问题讨论】:

  • .NET Framework 或 Core(他们将 NuGet 派生内容放在不同的地方)?
  • 实际上两者都不是(而且两者都有!)。假设最新版本的 nuget.exe 安装在 PATH 上,我只运行 nuget install octopustools
  • 如果项目使用PackageReference(.net 核心项目的标准和 .net 框架的选择加入)并且它已经在全局包缓存中,则可能什么都不做路径中的 NuGet.Config。所以这真的取决于你的确切设置和你想要做什么。
  • 正如我在问题中提到的,我在解决方案之外运行此命令,因此它只是安装到当前目录的子文件夹中。
  • 您可以使用 -ExcludeVersion 命令行参数。如果您运行nuget install octopustools -ExcludeVersion,则不会创建版本文件夹,而是可以使用OctopusTools\tools\octo.exe 访问octo.exe。

标签: powershell nuget


【解决方案1】:

非常感谢@Matt Ward 的评论解决了这个问题 - 只需使用 ExcludeVersion 即可保证安装的 exe 的路径,即使安装了不同的版本。

为了让它工作,我必须更新安装的 nuget 版本,因为旧版本不支持这个标志。 (如果使用巧克力,更新很容易:choco upgrade nuget.commandline -y

然后要访问 octo.exe(在本例中调用帮助),只需执行以下操作:

PS> nuget install OctopusTools --ExcludeVersion
PS> OctopusTools\tools\octo.exe help

【讨论】:

  • 这对nuget locals global-packages -list文件夹中的全局包不起作用,那里的任何安装都会忽略-ExcludeVersion参数
【解决方案2】:

如果使用 PowerShell Install-Package cmdlet,您可以获得新安装的 Octopus Tools 文件夹并将其添加到路径中(这就是为什么我想您想知道它的安装位置)如下:

PS>Install-Package -Name OctopusTools -Force
PS>$octoPath = (Get-Item((Get-Package -Name OctopusTools).Source)).DirectoryName +"\tools"
PS>$octoPath
PS>$env:Path += $env:Path + $octoPath

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-04
    • 2018-02-23
    • 1970-01-01
    • 2018-11-29
    • 2020-08-27
    • 2012-10-04
    • 2012-10-17
    • 1970-01-01
    相关资源
    最近更新 更多