从C#代码中执行NuGet命令

4

我正在尝试找到一种从C#代码中调用Install-Package myPackage的方法。

我已经尝试使用C#中的PowerShell,但我对它不是很熟悉。

有人可以给我一个如何实现的示例吗?

2个回答

1
你可以尝试以下代码来执行PowerShell命令:

命名空间: System.Management.Automation

程序集: System.Management.Automation (在 system.management.automation.dll中)

    private static void RunPowershell(string command)
    {

        var powerShell = PowerShell.Create();
        powerShell.AddCommand(command);
        powerShell.Invoke();

    }

谢谢,但我已经知道如何做了。问题是NuGet提供了一个我需要调用的PowerShell扩展。在Visual Studio中,我可以使用包管理器来执行命令,但我无法弄清楚如何从代码中调用NuGet命令。 - user569996

0
你需要在 PowerShell 会话中添加 NuGet 模块。安装完 NuGet 后,你可以运行 Get-Module 命令来查看可用的模块。
PM> get-module | fl *


ExportedCommands    : {Get-Package, Update-Package, Register-TabExpansion, Get-Project...}
Name                : NuGet
Path                : C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft Corporation\NuGet Package Manager\1.1.229.160\Scripts\nuget.psm1
Description         : NuGet PowerShell module used for the Package Manager Console
Guid                : 76e6f9c4-7045-44c0-a557-17fab0835c12
ModuleBase          : C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft Corporation\NuGet Package Manager\1.1.229.160
PrivateData         : 
Version             : 1.1.229.160
ModuleType          : Script
AccessMode          : ReadWrite
ExportedFunctions   : {[NugetTabExpansion, NugetTabExpansion], [Register-TabExpansion, Register-TabExpansion]}
ExportedCmdlets     : {[Add-BindingRedirect, Add-BindingRedirect], [Get-Package, Get-Package], [Get-Project, Get-Project], [Install-Package, Install-Package]...}
NestedModules       : {NuGet.Cmdlets}
RequiredModules     : {}
ExportedVariables   : {}
ExportedAliases     : {}
SessionState        : System.Management.Automation.SessionState
OnRemove            : 
ExportedFormatFiles : {C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft Corporation\NuGet Package Manager\1.1.229.160\Scripts\NuGet.Format.ps1xml}
ExportedTypeFiles   : {C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft Corporation\NuGet Package Manager\1.1.229.160\Scripts\NuGet.Types.ps1xml}

注意这里的PSM1文件路径

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft Corporation\NuGet Package Manager\1.1.229.160\Scripts\nuget.psm1

如果您导入此PSM1文件,您应该能够执行NuGet命令。

我需要做类似的事情。你能否详细说明如何导入PSM1文件以执行NuGet命令?我的情况是,我想制作一个WinForms应用程序,执行一个脚手架包,将从用户在UI上选择的一堆参数传递给它,以控制生成哪些文件。 - chrisp_68
我在NuGet论坛上收到了回复,称NuGet 1.2有一个API,可以直接在代码中执行这种操作,而不必调用PowerShell命令。我会等那里的API,跳过PowerShell方法。http://nuget.codeplex.com/discussions/246688 - user569996
请查看以下链接,以获取其工作示例:http://haacked.com/archive/2011/01/15/building-a-self-updating-site-using-nuget.aspx - ferventcoder

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