nuget:在安装到本地存储库中的版本时约束版本

时间:2014-07-23 05:47:16

标签: nuget

在执行" 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.

1 个答案:

答案 0 :(得分:1)

您可以使用Get-Package命令。这将列出解决方案中安装的所有软件包。

所以你可以这样:

$version = Get-Package | where-object { $_.Id -eq 'NUnit' } | % { $_.Version }
Install-Package NUnit -version $version

您可以将其转换为功能并将其添加到您的个人资料中。这将允许您使用一行命令,而不是每次都键入所有命令。如果没有使用该软件包ID安装的软件包,您可能需要添加一些错误检查。

另一种方法是运行Get-Package,从输出中复制所需的版本,然后运行带有版本号的Install-Package命令。