Я пытаюсь использовать 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 intellisense может отображать все в пределах пространства имен 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