在执行" install-package"时,nuget将从软件包源获取最新版本。如果我想约束所选版本,我需要明确设置版本号。有没有办法告诉nuget从已经安装在解决方案中的本地软件包中解析版本?
示例:
package in solution packages folder:
Castle.Core.3.2.0
install-package castle.Core -projectname SomeProjectRequiringCastle
这将下载最新版本的Castle(3.3.0),并将其添加到我的packages文件夹中。这不是我想要做的99%的时间。为了限制nuget选择已安装的版本号,我必须记住已安装的版本号:
install-package castle.Core -projectname SomeProjectRequiringCastle -version 3.2.0
我当前的工作流程包括浏览到packages文件夹以查看已安装的内容,或者从已经依赖于请求的程序集的项目中打开packages.config文件。理想情况下,我想要这样的事情:
install-package castle.Core -localRepositoryVersion
有没有办法实现这种行为?或者也许一些漂亮的命令可以使我的工作流程更顺畅?注意:"管理" nuget包管理器(GUI)下的选项是鼠标重,并且已被我的鼠标过敏手指拒绝。
我在一个函数中包含了Matts的答案(相信Matt,谢谢),这里是懒惰的完整解决方案:
installLocal.psm1
<#
.Synopsis
Installs a package
#>
function install-local
{
[cmdletbinding()]
Param(
[Parameter(Mandatory=$true, Position=0)]
[String] $Id,
[Parameter(Mandatory=$true, Position=1)]
[string]$ProjectName
)
$version = get-package | ? { $_.Id -eq $Id } | % { $_.Version }
if (-not $version) {
throw "A package with id $Id has not been installed in the solution"
} else {
write-host "Found version: $version of $Id installed in solution"
}
install-package -Id $Id -ProjectName $ProjectName -Version $version
}
export-modulemember -function install-local
将此行添加到visual studio使用的powershell配置文件中(在我的情况下位于:C:\ Data \ WindowsPowerShell \ NuGet_profile.ps1)
import-module <path to file>\installLocal.psm1
然后我可以从包管理器控制台编写单行代码:
PM> install-local moq -projectname LibWhichNeedsDeps
Found version: 4.0.10827 of moq installed in solution
'Moq 4.0.10827' already installed.
Adding 'Moq 4.0.10827' to LibWhichNeedsDeps.
Successfully added 'Moq 4.0.10827' to LibWhichNeedsDeps.
答案 0 :(得分:1)
您可以使用Get-Package命令。这将列出解决方案中安装的所有软件包。
所以你可以这样:
$version = Get-Package | where-object { $_.Id -eq 'NUnit' } | % { $_.Version }
Install-Package NUnit -version $version
您可以将其转换为功能并将其添加到您的个人资料中。这将允许您使用一行命令,而不是每次都键入所有命令。如果没有使用该软件包ID安装的软件包,您可能需要添加一些错误检查。
另一种方法是运行Get-Package,从输出中复制所需的版本,然后运行带有版本号的Install-Package命令。