Двоичный командлет PowerShell Core с использованием SimpleInjector приводит к исключению FileNotFoundException - PullRequest
0 голосов
/ 22 октября 2018

Вопрос

Я пытаюсь создать библиотеку двоичных командлетов PowerShell Core, которая использует SimpleInjector, но не может понять, почему это приводит к FileNotFoundException при отладке с помощью Visual Studio.

Подробности

Я создал очень простую библиотеку командлетов PowerShell в Visual Studio, ориентированную на .NET Standard 2.0 и использующую пакет PowerShellStandard.Library (v5.1.0-RC1). Вы можете просмотреть / клонировать его здесь .Он содержит следующий командлет:

using System.Management.Automation;
using Newtonsoft.Json.Linq;
using SimpleInjector;

[Cmdlet(VerbsDiagnostic.Test, "SimpleInjectorDependency")]
public class TestSimpleInjectorDependencyCmdlet : PSCmdlet
{
    protected override void ProcessRecord()
    {
        var container = new Container();
        WriteObject("Success!");
    }
}

В результате получается FileNotFoundException:

simple-injector

Этот кажется специфично для SimpleInjector, потому что, например, json.net работает без проблем:

using System.Management.Automation;
using Newtonsoft.Json.Linq;
using SimpleInjector;

[Cmdlet(VerbsDiagnostic.Test, "JsonDotNetDependency")]
public class TestJsonDotNetDependencyCmdlet : PSCmdlet
{
    protected override void ProcessRecord()
    {
        var j = new JObject();
        WriteObject("Success!");
    }
}

json.net

Я действительно надеваюне понимаю, что здесь происходит.Я даже не уверен, действительно ли это относится к SimpleInjector или есть другие факторы в игре.Если кто-нибудь сможет просветить меня, я буду очень признателен!

1 Ответ

0 голосов
/ 22 октября 2018

Я не уверен, что это лучшее решение, но я наконец-то нашел решение своей проблемы:

Сначала я добавил событие после сборки: dotnet publish --no-build.

enter image description here

Во-вторых, на вкладке «Отладка» проекта я изменил «Аргументы приложения», чтобы импортировать модуль моего командлета из \bin\Debug\netstandard2.0\publish\ каталог, а не из \bin\Debug\netstandard2.0\.Итак, вместо этого:

-NoExit -NoLogo -NoProfile -Command "Import-Module .\MyNetStandardProject.dll"

Я использовал это:

-NoExit -NoLogo -NoProfile -Command "Import-Module .\publish\MyNetStandardProject.dll"

Как показано здесь:

debug settings

Как только я это сделал, я смог без проблем запустить описанный в моем вопросе Test-SimpleInjectorDependency командлет.

...