为什么Powershell在`ByteArrayContent`上找不到字节数组构造函数?

时间:2014-12-05 09:36:08

标签: .net powershell

我正在尝试使用以下powershell将文件的二进制内容加载到ByteArrayContent中:

$arr = Get-Content $pathToFile -Encoding Byte -ReadCount 0
$binaryContent = New-Object System.Net.Http.ByteArrayContent($arr)

脚本运行时收到以下错误:

Cannot find an overload for "ByteArrayContent" and the argument count: "460"

我使用Powershell 4.0在Windows 8.1上运行此脚本。

检查文档时ByteArrayContent有两个重载,我使用第一个重载,所以我确保将byte[]数组解析为ctor。

最后我使用了另一个ctor,一切正常:

$binaryContent = New-Object System.Net.Http.ByteArrayContent($arr, 0, $arr.Length)

我检查了我正在使用的System.Net.Http程序集的版本,运行以下命令查看所有已加载的程序集:

[System.AppDomain]::CurrentDomain.GetAssemblies()
v4.0.30319 => C:\windows\Microsoft.Net\assembly\GAC_MSIL\System.Net.Http\v4.0_4.0.0.0

在MSDN文档中,我看不到ByteArrayContent的任何其他版本,所以有关描述此行为的任何想法?

1 个答案:

答案 0 :(得分:3)

你能否替换

$binaryContent = New-Object System.Net.Http.ByteArrayContent($arr)

$binaryContent = New-Object System.Net.Http.ByteArrayContent -ArgumentList @(,$arr)

或更改行:

$arr = Get-Content $pathToFile -Encoding Byte -ReadCount 0

[byte[]]$arr = Get-Content $pathToFile -Encoding Byte -ReadCount 0


说明
Powershell通常期望一组参数来找到要调用的正确构造函数。在您的情况下,它将字节数组视为460个单独的参数。

通过使用@(,$ arr),我们得到一个包含一个元素的数组,一个元素本身就是一个数组,但是对于powershell来说,它足以考虑使用字节数组的构造函数。