nuget.exe安装不更新packages.config(或.csproj)?

时间:2012-10-17 09:12:22

标签: c# mono nuget

在尝试使用Linux / mono上的nuget构建工作流时,我注意到了一件奇怪的事情。

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

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

是否还有其他人尝试使用nuget.exe安装新软件包或对此有何见解?我完全咆哮着错误的树吗?

2 个答案:

答案 0 :(得分: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>。这将安装包及其依赖项。

答案 1 :(得分:0)

我认为更好的解决方法是使用the technique described here生成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