8

在尝试让 nuget 构建工作流程在 Linux/mono 上运行时,我注意到一件奇怪的事情。

在 Linux 上,我无法使用 nuget Visual Studio 插件或 Powershell 控制台,但我有 nuget.exe 命令行实用程序。这个实用程序有一个“安装”命令,它可以正确地获取包并将它们放在我的包目录中。

但是,nuget.exe 的安装(与 Visual Studio 安装相反)似乎不会使用它添加的包更新 packages.config,也不会将项目引用添加到我的 .csproj。后者不太重要(我可以手动完成),因为 packages.config 也需要包含递归依赖项,我不能手动完成......

是否有其他人尝试仅使用 nuget.exe 安装新软件包或对此有任何见解?我是不是完全找错树了?

4

2 回答 2

3

就目前(Nuget 2.8.1)而言,这仍然是不可能的,并且是 nuget 命令行客户端的主要缺点,正如我所见。

Nuget.exe 必须能够安装包并将其添加到packages.config 所有依赖项中,才能用于最简单的情况之外的任何事情。

我创建了一个问题,请参阅https://nuget.codeplex.com/workitem/4258

解决方法

目前,可以使用以下方法。请注意,它远非最佳,但至少使您能够使用 nuget 并正确解析依赖包。

  1. 诉诸packages.config手动管理。添加您需要的包,但忽略它们的依赖项。请注意,这与“普通”packages.config文件不同,后者也列出了依赖项。

  2. 使用脚本遍历packages.config并为每个包发出一个nuget install <package-id> -Version <version>。这将安装包及其依赖项。

于 2014-08-15T09:05:08.710 回答
0

我认为更好的解决方法是使用此处描述的技术来生成一个 PCM 命令,该命令将一次性安装多个包。

这是一个小的概念证明,它将最终命令复制到剪贴板:

param([string[]]$dependencies)

$command = "";

foreach($dependency in $dependencies) 
{
    $name = $item.Name
    if($dependency)
    {
        $command += ('"{0}", ' -f $dependency)
    }
}

$command = $command.Substring(0, $command.Length - 2) + " | foreach {Install-Package `$_}"
$command | Set-Clipboard
于 2017-10-27T13:40:41.290 回答