在尝试使用Linux / mono上的nuget构建工作流时,我注意到了一件奇怪的事情。
在Linux上,我不能使用nuget Visual Studio插件或Powershell控制台,但我有nuget.exe命令行实用程序。该实用程序有一个“install”命令,可以正确地获取包并将它们放在我的包目录中。
然而,nuget.exe的安装(与Visual Studio安装相反)似乎没有使用它添加的包更新packages.config,也没有将项目引用添加到我的.csproj。后者不那么重要(我可以手动完成),因为packages.config需要包含递归依赖,我也不能手动执行...
是否还有其他人尝试使用nuget.exe安装新软件包或对此有何见解?我完全咆哮着错误的树吗?
答案 0 :(得分:3)
正如目前(Nuget 2.8.1)所说,这仍然是不可能的,也是nuget命令行客户端的一个主要缺点,正如我所看到的那样。
Nuget.exe必须能够安装软件包并将其添加到packages.config
并具有所有依赖关系,以便除了最简单的情况之外,还可以使用它。
我创建了一个问题,请参阅https://nuget.codeplex.com/workitem/4258
目前,可以使用以下方法。请注意,它远非最佳,但至少使您能够正确使用nuget并解析依赖包。
手动管理packages.config
。添加所需的包,但省略它们的依赖项。请注意,这与"普通"不同。 packages.config
个文件,它们也列出了依赖项。
使用脚本遍历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