Отладчику кода VS не удается найти перегрузку [Newtonsoft.Json.Schema.SchemaExtensions] :: IsValid, даже если он работает в CLI - PullRequest
1 голос
/ 11 октября 2019

У меня есть код PowerShell, вызывающий [Newtonsoft.Json.Schema.SchemaExtensions]::IsValid. Это работает в интерфейсе командной строки PowerShell (v5.1.18362.145), но не в отладчике кода VS (v1.38.1, расширение PS1 v2019.9.0).

Фрагмент кода, который выдает:

    $JsonDllPath = "$SetupScriptsDir\dependencies\Newtonsoft.Json.dll"
    $JsonSchemaDllPath = "$SetupScriptsDir\dependencies\Newtonsoft.Json.Schema.dll"
    Add-Type -Path $JsonDllPath
    Add-Type -Path $JsonSchemaDllPath

    $Errors = New-Object System.Collections.Generic.List[string]
    $JsonObject = [Newtonsoft.Json.Linq.JToken]::Parse($JsonContent)
    $SchemaObject = [Newtonsoft.Json.Schema.JSchema]::Parse($SchemaContent)

    # THIS LINE THROWS
    $result = [Newtonsoft.Json.Schema.SchemaExtensions]::IsValid($JsonObject, $SchemaObject, [ref] $Errors)

Я получаю сообщение об ошибке при переходе с отладчиком кода VS:

Cannot find an overload for "IsValid" and the argument count: "3".
At line:1 char:1
+ [Newtonsoft.Json.Schema.SchemaExtensions]::IsValid($JsonObject, $Sche ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MethodCountCouldNotFindBest

Мне кажется, существует проблема с печатанием, потому что:

В CLI:

> [Newtonsoft.Json.Schema.SchemaExtensions]::IsValid

OverloadDefinitions
-------------------
static bool IsValid(Newtonsoft.Json.Linq.JToken source, Newtonsoft.Json.Schema.JSchema schema)
static bool IsValid(Newtonsoft.Json.Linq.JToken source, Newtonsoft.Json.Schema.JSchema schema, [ref]
System.Collections.Generic.IList[string] errorMessages)
static bool IsValid(Newtonsoft.Json.Linq.JToken source, Newtonsoft.Json.Schema.JSchema schema, [ref]
System.Collections.Generic.IList[Newtonsoft.Json.Schema.ValidationError] errors)

InКод VS:

> [Newtonsoft.Json.Schema.SchemaExtensions]::IsValid

OverloadDefinitions
-------------------
static bool IsValid(Newtonsoft.Json.Linq.JToken, Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed source, Newtonsoft.Json.Schema.JSchema schema)
static bool IsValid(Newtonsoft.Json.Linq.JToken, Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed source, Newtonsoft.Json.Schema.JSchema schema, [ref] System.Collections.Generic.IList[string] errorMessages)
static bool IsValid(Newtonsoft.Json.Linq.JToken, Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed source, Newtonsoft.Json.Schema.JSchema schema, [ref] System.Collections.Generic.IList[Newtonsoft.Json.Schema.ValidationError] errors)

Обратите внимание, что код VS показывает дополнительную информацию для типа JToken. Возможно, это связано с тем, что VS Code загружает дополнительные сборки?

В CLI:

Show-LoadedAssemblies | Where-Object { $_.name -match "Json"}

name                   version  PublicKeyToken   location
----                   -------  --------------   --------
Newtonsoft.Json        10.0.0.0 30ad4fe6b2a6aeed (...)\dependencies\Newtonsoft.Json.dll
Newtonsoft.Json.Schema 2.0.0.0  30ad4fe6b2a6aeed (...)\dependencies\Newtonsoft.Json.Schema.dll

В VS Code:

Show-LoadedAssemblies | Where-Object { $_.name -match "Json"}

name                   version  PublicKeyToken   location
----                   -------  --------------   --------
Newtonsoft.Json        10.0.0.0 30ad4fe6b2a6aeed (...)\dependencies\Newtonsoft.Json.dll
Newtonsoft.Json        12.0.0.0 30ad4fe6b2a6aeed (...)\.vscode\extensions\ms-vscode.powershell-2019.9.0\modules\PSScriptAnalyzer\Newtonsoft.Json.dll
Newtonsoft.Json        11.0.0.0 30ad4fe6b2a6aeed (...)\.vscode\extensions\ms-vscode.powershell-2019.9.0\modules\PowerShellEditorServices\bin\Desktop\Newtonsoft.Json.dll
Newtonsoft.Json.Schema 2.0.0.0  30ad4fe6b2a6aeed (...)\dependencies\Newtonsoft.Json.Schema.dll

(Обратите внимание, что Show-LoadedAssemblies - это моя функция, на основе этой статьи )

Редактировать 14 октября 2019 года:

Связанный вопрос: Код Powershell хорошо работает на Powershell. exe и Powershell ISE, но не работающие на VS Code
Связанные отчет об ошибках
И обходной путь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...