【发布时间】:2019-08-22 02:12:07
【问题描述】:
我正在尝试将 HttpClient 与自定义 HttpClientHandler 一起使用(以解决无法通过重定向正确管理的 Cookie 问题)。
两者都在 System.Net.Http 程序集(和命名空间)中,而 Powershell(和 ISE)大部分时间都看不到这些类(也看不到命名空间)。
它确实找到了一个类 System.Net.Http(实际上是 WebRequestMethods.Http),我不会惊讶于它会破坏一切。
所以我创建了这个 KISS 示例:
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 和我的脚本呢?
我在 Win10 上使用 PS 5.1,我是 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
【问题讨论】:
-
为什么在用户运行的脚本中不能有 add-type 或者 using assembly?
-
至于 Add-Type 的问题不是我不想使用它,而是 PowerShell 没有运行它(或者在我的脚本中没有运行)。直到现在我才知道使用汇编。即使使用程序集,我仍然有错误。见我EDIT2。