PowerShell脚本安装NuGet包

3
每次开始一个项目时,我都会想要安装NuGet包Elmah、Glimpse、MvcScaffolding、Squishit等等-这些是我知道的。也许我还应该安装其他的包吗?
无论如何,把所有这些都放在一个脚本中,只需要运行它就好了,这样比记住所有的包名更方便。然而,这是我第一次接触PowerShell,不确定如何操作。
我看过一个示例项目,脚本看起来很简单,但我不明白为什么需要安装带有.test后缀的包?还有,-Project参数是什么意思?
例如:
Install-Package SqlServerCompact -Project MileageStats.Data.SqlCe
Install-Package SqlServerCompact -Project MileageStats.Data.SqlCe.tests

我做了一个谷歌搜索以获取更多信息,但我认为我正在错误的地方寻找。

3个回答

7
创建一个包含所需NuGet软件包的项目模板,正如Fabrice已经建议的那样,可能是我会采取的方法。要获取最新版本的NuGet软件包,您可以使用NuGet Package Updater软件包。这将解决项目模板目前仅支持安装特定版本NuGet软件包的问题。
或者,您可以在NuGet配置文件中存储有用的PowerShell脚本。在%UserProfile%\Documents\WindowsPowerShell目录(��如C:\Users[YourUserName]\Documents\WindowsPowerShell\NuGet_profile.ps1)中创建一个名为NuGet_profile.ps1的文件。
在NuGet_profile.ps1中,您可以添加PowerShell函数,然后可以从Visual Studio内的Package Manager Console窗口调用它们。在调用函数之前,您需要重新启动Visual Studio。下面是一个示例NuGet_profile.ps1文件。
function Install-StandardPackages {
    param(
        [Parameter(position=0, mandatory=$true)]
        [string]$projectName
    )

    Install-Package elmah -ProjectName $projectName
    Install-Package SqlServerCompact -ProjectName $projectName
}

function Install-StandardPackagesForAllProjects {
    foreach ($project in Get-Project -all) {
        Install-StandardPackages $project.Name
    }
}

现在,有了这些定义的函数,您可以在“程序包管理器控制台”中运行以下命令,将elmah和SqlServerCompact安装到名为MyProject的项目中。
Install-StandardPackages MyProject

你可以通过在包管理器控制台中运行以下命令,将elmah和SqlServerCompact安装到当前打开的解决方案中的所有项目中。

Install-StandardPackagesForAllProjects

在Install-Package命令中,-ProjectName参数用于指定要安装包的项目名称。tests后缀看起来像是包含单元测试的项目名称的一部分。

谢谢,这个可行,我知道该怎么做了。 - arame3333

0
一个解决方案是创建一个元NuGet包,将其托管在本地存储库中。您可以创建一个NuGet包,并依赖于您特定项目设置所需的所有不同包。您只需要安装元包,它会自动安装所有依赖项。

我意识到了我的解决方案存在问题。Nuget 只会查找一个软件包源,这意味着元包需要发布在与依赖项相同的位置。在这种情况下,这意味着您必须将软件包下载到本地软件包存储库中。 - PHeiberg
我对这种东西很新,你有什么好的链接可以给我看吗? - arame3333
关于创建软件包的详细信息请参见:http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package。在本地共享上发布只需要创建一个UNC文件共享,将nupkg文件放置其中,并在VS中设置一个指向该文件共享的新软件包源即可。 - PHeiberg
请理解我在这方面确实是个初学者。我理解您的建议是我需要将PowerShell脚本定位到每个人都可以访问的位置,即UNC文件共享。听起来很不错。但我不知道该怎么做。在您的回答中,您提到了依赖项,我不知道您在这里想要什么。而且您谈到了一个包,而我所想的是可以在程序包管理器控制台中运行的脚本。我的印象是需要一个包,因为脚本无法处理依赖项? - arame3333
我不依赖于议程的原因是我想要下载的软件包彼此之间并不相互依赖,就我所知(请参见原始问题)。当然,这种情况将来可能会改变。 - arame3333
@arame3333 - 我的建议是创建一个新的NuGet包。包可以依赖于其他包。有依赖关系将导致在安装依赖包时同时安装依赖项。元包是一个没有实际内容的包,它只有依赖关系。这种方法的缺点是您必须本地托管所有包,从而失去了拥有最新版本等优势。 - PHeiberg

0

你可能想要创建自己的MVC3项目模板,以便可以指定你喜欢的Nuget包。为此,你应该查看Phil Haack的博客文章


有趣的方法 - 可惜它只限于本地安装包并且必须指定精确版本。希望在未来的版本中能够解决这个问题。 - PHeiberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接