【问题标题】:nuget.exe install not updating packages.config (or .csproj)?nuget.exe 安装不更新packages.config(或.csproj)?
【发布时间】:2012-10-17 09:12:21
【问题描述】:

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

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

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

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

【问题讨论】:

  • 请向 NuGet 发送错误报告,nuget.codeplex.com/workitem/list/basic
  • 交叉发布到 nuget codeplex 论坛,有趣的讨论:nuget.codeplex.com/discussions/399714
  • 感谢您粘贴链接。这是一本有趣的书。我多么希望其中一位开发人员能够在 Linux + Mono 上保持足够的时间,以确保将兼容性问题降至最低,但这只是我的想象。
  • 我也是...根据评论,修复似乎不应该太难,我可能会看看这个。然后当然还有monodevelop nuget支持:)
  • nuget.exe install 命令确实是用词不当。它应该被称为恢复命令。正如您和许多其他人一样,他们意外地发现,nuget.exe install 命令只恢复包,它不会将包安装到项目中。

标签: c# mono nuget


【解决方案1】:

就目前 (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>。这将安装包及其依赖项。

【讨论】:

  • nuget install 目前不更新项目文件。如果不需要修改项目文件,使用nuget install 下载 NuGet 包即可。
【解决方案2】:

我认为更好的解决方法是使用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

【讨论】:

    猜你喜欢
    • 2014-05-29
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 2011-10-16
    • 2015-04-30
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多