我正在尝试使用自定义的HttpClientHandler
(修复Cookie在重定向时未正确处理的问题)与HttpClient
一起使用。
它们都在System.Net.Http
程序集(和命名空间)中,但是大部分时间Powershell(和ISE)无法看到这些类(也无法看到该命名空间)。
它确实找到了一个System.Net.Http
类(事实上它是WebRequestMethods.Http),我不会感到惊讶如果它会破坏一切。
因此,我创建了这个简单示例:
using namespace System.Net.Http
class Wtf : HttpClientHandler {
}
$t = [HttpClient]::new()
如果我运行它,它会告诉我该类型不存在(如果我使用完整的命名空间而不是“using”也是如此)。
然而有趣的是接下来发生了什么。如果我在ISE中使用相同的代码,则IDE只会告诉我找不到基类HttpClient(而不是实例化),
我发现Add-Type可以帮助我,在此添加。
Add-Type -AssemblyName System.Net.Http
Write-Host "Hello World"
在 using namespace System.Net.Http
和 class Wtf : HttpClientHandler {
之间,我仍然在尝试运行它时得到了同样的错误 - 但是我根本看不到我的 "Hello World"
!所以它似乎在解析时失败了,甚至没有尝试运行它。ISE仍然在IDE中显示相同的错误。
然后,如果我在再次运行脚本之前先运行 Add-Type -AssemblyName System.Net.Http
(无论是从PowerShell提示还是ISE),就可以顺利地运行所有内容。从那时起,ISE IDE智能感知可以列出 System.Net.Http
命名空间中的所有内容。
那么,用户如何只启动我的PowerShell脚本而不必运行 Add-Type
和我的脚本呢?
我正在使用PS 5.1在Win10上,并且我对PowerShell环境还很陌生,但我有C#背景。
EDIT1:使用 HttpClientHandler 而不是 HttpClient(但问题仍然存在)
EDIT2: 这是我目前正在使用的内容
using assembly System.Net.Http
using namespace System.Net.Http
class Test : HttpClient {
}
[HttpClient]::new()
以下是输出结果:
Au caractère C:\Users\0xdcdcdcd\Desktop\Test.ps1:4 : 14
+ class Test : HttpClient {
+ ~~~~~~~~~~
Type [HttpClient] introuvable.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : TypeNotFound