当前位置:  开发笔记 > 编程语言 > 正文

Powershell实例的Streams属性上的"Information"属性不可用于编译时

如何解决《Powershell实例的Streams属性上的"Information"属性不可用于编译时》经验,为你挑选了1个好方法。

所以..非常奇怪的问题.

使用VS2015和.net 4.52

我开发了这个C#powershell代码,它正在运行一个脚本并捕获输出.像这样:

        using (PowerShell powerShellInstance = PowerShell.Create())
        {
            powerShellInstance.AddScript(scriptContents);

            Collection PSOutput = powerShellInstance.Invoke(); 

            if (powerShellInstance.Streams.Information.Count > 0)
            {

                    foreach (var item in powerShellInstance.Streams.Information)
                    {
                        //do something with info
                    }


                }

            }
        }

编译和运行(在Windows 10 pro机器上),没有问题.

直到我得到一台新机器(Surface pro 4,所以也是windows 10 pro)并尝试编译代码,我收到此错误:

'PSDataStreams'不包含'Information'的定义,也没有接受'PSDataStreams'类型的第一个参数的扩展方法'Information'(你是否缺少using指令或汇编引用?)

这都是基于TFS的,所以我确定它是相同的代码.

如果我在两台机器上进行定义,问题就变得很明显了:

在此输入图像描述

所以,我注释掉了不编译代码并运行它,看看运行时发生了什么:

在此输入图像描述

那么财产就在那里..有人对此有一个很好的解释吗?

顺便说一句:msdn文档没有提到信息属性..



1> Mathias R. J..:

您可能System.Management.Automation.dll在Surface Pro上引用了错误的程序集版本.

在我的Windows 10 Pro安装(从Windows 8.1升级)上,我有两个版本,每个GAC一个:

2 ps版本

在图片中选择的那个是"旧的",存在于旧的GAC(C:\windows\assembly)中,并使用文件版本6.1.7600.16385进行标识.

另一个(包含正确版本PSDataStreams并公开Information流)存在于C:\Windows\Microsoft.NET\assembly文件版本10.0.10240.16384中.


@Flores 2 GAC自CLR 4.0版发布以来.PowerShell 3.0 SDK(参考程序集中的一个)中的一个将无法工作,PowerShell 5.0中引入了信息流
推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有