2014-07-23 65 views
0

在执行“install-package”时,nuget将从软件包源中获取最新版本。如果我想约束所选版本,则需要明确设置版本号。有没有办法告诉nuget解决解决方案中已安装的本地软件包的版本?nuget:在安装到本地存储库中的版本时限制版本

例子:

package in solution packages folder: 
Castle.Core.3.2.0 

install-package castle.Core -projectname SomeProjectRequiringCastle 

这将下载城堡(3.3.0)的最新版本,并把它添加到我的包文件夹。这不是我想要做99%的时间。为了约束的NuGet选择的版本号已经安装了我一定要记得已经安装的版本号:

install-package castle.Core -projectname SomeProjectRequiringCastle -version 3.2.0 

我目前的工作流程包括浏览到包文件夹以查看已安装什么或打开packages.config文件来自已经依赖于所请求的程序集的项目。理想情况下,我想要这样的事情:

install-package castle.Core -localRepositoryVersion 

有没有办法实现这种行为?或者也许一些漂亮的命令可以让我的工作流程更平滑一些?注意:nuget包管理器(GUI)下的“管理”选项是鼠标沉重的,并且已经被我的鼠标过敏手指拒绝。

编辑

我包马茨回答(信用马特,感谢)起来的功能,这里是为懒惰的一个完整的解决方案:

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

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

所以,你可以类似于:

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

你可以把它变成一个功能,并将其添加到您的个人资料。这将允许您使用一行命令,而不是每次输入所有内容。如果没有使用该软件包ID安装的软件包,则需要添加一些错误检查。

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