我的公司有一个用 C# 编写的 .NET Powershell 模块,允许高级用户在我们的产品中自动执行任务。目前它以使用 .NET 4.6.1 的 Powershell 5 为目标。我们希望让使用其他操作系统的客户也能使用它,并且由于它没有特定于操作系统的代码,因此移植它很简单。
但是,我找不到有关应遵循的调试工作流程的文档。在标准的 .NET Powershell 中,这非常简单并且需要一次性设置过程:
- 将调试可执行文件配置为 Powershell 路径
- 将调试参数设置为加载模块的短脚本,并在适当时执行正在测试的函数。
- 按 F5
但是,这不适用于 Powershell Core。由于该项目依赖于 NuGet 包,因此模块注册失败并出现依赖项错误。我能够找出另一个工作流程,但它有点迟钝:
- 导航到项目目录
- 执行
dotnet publish -f netstandard2.0 -c debug
- 执行
Import-Module ./bin/Debug/netstandard2.0/publish/MyModule.dll
- 执行
$pid
找到PID - 在 Visual Studio 中通过 Attach to Process 附加到 PID
这行得通,我已经用这种方法调试了一些问题,但这不是最令人愉快或最有效的方法。我相信一定有更好的方法,只是没有很好的记录。
最佳答案
我最初提出了一种基于脚本的方法,您可以在这篇文章的历史记录中看到它,但当时我不知道的是 CopyLocalLockFileAssemblies
使调试目录看起来像以前在 .NET Framework 上工作时的样子的属性。您只需要将此添加到您的 .csproj
在<PropertyGroup>
:
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
然后,调试设置与加载到第三方应用程序中的任何其他 .NET 模块一样:
- 右键单击您的 Powershell 模块项目并单击属性
- 选择调试
- 将启动设置为可执行
- 可执行文件:
C:\Program Files\PowerShell\6\pwsh.exe
- 参数:
-NoExit -Command "Import-Module C:\dev\my-module\bin\Debug\netstandard2.0\my-module.dll"
- 将您的模块设置为启动项目
- 按 F5 开始调试。
关于powershell - Powershell Core 模块的适当调试工作流程是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52156047/