调用Get-WindowsOptionalFeature时,Nuget包管理器失败

时间:2016-12-08 19:40:14

标签: powershell visual-studio-2015 nuget windows-10

我正在尝试使用PowerShell安装Windows功能(不要问)作为项目的一部分。在PowerShell控制台中,我可以运行命令:

Get-WindowsOptionalFeature -Online -FeatureName "IIS-WebServerRole"

并成功完成。 然后当我尝试从PM>运行时在Visual Studio 2015中提示(以管理员身份运行)它然后给出了以下错误:

get-windowsoptionalfeature : An attempt was made to load a program with an incorrect format.

At line:1 char:1
+ get-windowsoptionalfeature -online -featurename "IIS-WebServerRole"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Get-WindowsOptionalFeature], COMException
    + FullyQualifiedErrorId : Microsoft.Dism.Commands.GetWindowsOptionalFeatureCommand

这是我目前来自wihtin Package Manager的$ PSVersionTable。

Name                           Value
----                           -----
PSVersion                      5.1.14393.206
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.14393.206 
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0   
PSRemotingProtocolVersion      2.3 
SerializationVersion           1.1.0.1

我可以成功运行get-help get-windowsoptionalfeature,它会显示命令的语法。 我还在try catch块中运行命令以获取异常,这是它返回的内容:

System.Runtime.InteropServices.COMException (0x8007000B): An attempt was made to load a program with an incorrect format.

   at System.Management.Automation.MshCommandRuntime.ThrowTerminatingError(ErrorRecord errorRecord)

我可以做些什么来解决无法从Package Manager控制台使用Get-WindowsOptionalFeature的问题?

2 个答案:

答案 0 :(得分:1)

所以,这就是问题..软件包管理器控制台基本上是以 32位进程运行,而你的操作系统似乎是64。类似的错误是here

尝试从32位PowerShell(可能在%windir%\System32\WindowsPowerShell\v1.0下)执行命令,您将得到Visual Studio中出现的相同错误。用户@Wendy提到包管理器是用于处理你的nuget包,而不是作为powershell执行器。我很好奇,你为什么要这样做。

如果您需要从visual studio执行powershell命令,您可以将powershell脚本添加到您的解决方案中,并执行前面提到的一些额外步骤here,或者只是简单地将其作为提及的过程调用{{3} } 另一方面,如果您想将其作为nuget包的一部分,请尝试在安装脚本中编写脚本逻辑,如上所述here

答案 1 :(得分:-1)

根据软件包管理器控制台的介绍:https://nuget.codeplex.com/wikipage?title=Package%20Manager%20Console%20Command%20Reference%20(v1.3)软件包管理器控制台允许您从Visual Studio中运行PowerShell脚本,并且是基于PowerShell的NuGet命令的主机

Package Manager控制台仅提供PowerShell命令的帮助文档和说明,因此您无法在Package Manager控制台中运行PowerShell命令。