我正在尝试使用以下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
的任何其他版本,所以有关描述此行为的任何想法?
答案 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来说,它足以考虑使用字节数组的构造函数。