所以..非常奇怪的问题。
使用VS2015和.net 4.52
我开发了这个C#powershell代码,它正在运行一个脚本并捕获输出。像这样:
using (PowerShell powerShellInstance = PowerShell.Create())
{
powerShellInstance.AddScript(scriptContents);
Collection<PSObject> PSOutput = powerShellInstance.Invoke();
if (powerShellInstance.Streams.Information.Count > 0)
{
foreach (var item in powerShellInstance.Streams.Information)
{
//do something with info
}
}
}
}
编译并运行(在Windows 10专业版机器上),没问题。
直到我得到一台新机器(Surface pro 4,所以也是windows 10 pro)并尝试编译代码,我收到此错误:
&#39; PSDataStreams&#39;不包含&#39;信息&#39;的定义没有扩展方法&#39;信息&#39;接受类型&#39; PSDataStreams&#39;的第一个参数。可以找到(你错过了使用指令或程序集引用吗?)
这都是基于TFS的,所以我确定它是相同的代码。
如果我在两台机器上进行定义,问题就变得很明显了:
所以,我注释掉了没有编译代码并运行它,看看运行时发生了什么:
所以财产就在那里..有人对此有一个很好的解释吗?
BTW:msdn文档未提及信息属性..
答案 0 :(得分:9)
您可能在Surface Pro上引用了错误版本的System.Management.Automation.dll
程序集。
在我的Windows 10 Pro安装(从Windows 8.1升级)上,我有两个版本one in each GAC:
图片中选择的那个是“旧的”,位于旧的GAC(C:\windows\assembly
)中,并使用文件版本6.1.7600.16385进行标识。
另一个(包含正确版本的PSDataStreams
并公开Information
流)存在于C:\Windows\Microsoft.NET\assembly
中,并且在撰写时具有文件版本10.0.10240.16384。