我正在尝试创建一个使用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
:
此似乎专门针对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!");
}
}
我真的不明白这里发生了什么。我什至不确定这是否真的特定于SimpleInjector或是否有其他因素在起作用。如果有人能启发我,我将不胜感激!
答案 0 :(得分:2)
我不确定这是否是最好的解决方案,但是我终于想出了解决问题的方法:
首先,我添加了一个构建后事件:dotnet publish --no-build
。
第二,在项目的“调试”选项卡中,我更改了“应用程序参数”,以从\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"
如下所示:
一旦这样做,我就能无问题地运行问题中所述的Test-SimpleInjectorDependency
cmdlet。