使用SimpleInjector的二进制PowerShell Core cmdlet导致FileNotFoundException

时间:2018-10-21 21:32:12

标签: c# powershell .net-standard simple-injector powershell-core

问题

我正在尝试创建一个使用SimpleInjector的PowerShell Core二进制cmdlet库,但是无法弄清楚为什么使用Visual Studio调试时会导致FileNotFoundException的原因。

详细信息

我已经在Visual Studio中创建了一个超级简单的PowerShell cmdlet库,目标是.NET Standard 2.0,并使用了PowerShellStandard.Library包(v5.1.0-RC1)。 You can view/clone it here。它包含以下cmdlet:

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 :(得分:2)

我不确定这是否是最好的解决方案,但是我终于想出了解决问题的方法:

首先,我添加了一个构建后事件:dotnet publish --no-build

enter image description here

第二,在项目的“调试”选项卡中,我更改了“应用程序参数”,以从\bin\Debug\netstandard2.0\publish\目录而不是从\bin\Debug\netstandard2.0\导入我的cmdlet模块。因此,代替此:

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

我用了这个:

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

如下所示:

debug settings

一旦这样做,我就能无问题地运行问题中所述的Test-SimpleInjectorDependency cmdlet。