Powershell Core 模块的适当调试工作流程是什么?
What is an appropriate debugging workflow for Powershell Core modules?
我的公司有一个用 C# 编写的 .NET Powershell 模块,允许高级用户在我们的产品中自动执行任务。目前它以使用 .NET 4.6.1 的 Powershell 5 为目标。我们希望让使用其他操作系统的客户也能使用它,并且由于它没有 OS 特定代码,因此移植它很简单。
但是,我找不到有关应遵循的调试工作流程的文档。在标准的 .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
中通过附加到进程附加到 PID
这行得通,我已经用这种方法调试了一些问题,但这不是最令人愉快或最有效的方法。我相信一定有更好的方法,只是没有很好的记录。
我最初想出了一种基于脚本的方法,您可以在 post 的历史中看到它,但当时我不知道的是 CopyLocalLockFileAssemblies
属性 这使得调试目录看起来像以前在 .NET Framework 上工作时的样子。您只需要将此添加到 .csproj
中的 <PropertyGroup>
:
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
然后,调试设置与加载到第三方应用程序中的任何其他 .NET 模块一样:
- 右键单击您的 Powershell 模块项目并单击属性
- Select调试
- 将启动设置为可执行文件
- 可执行文件:
C:\Program Files\PowerShell\pwsh.exe
- 参数:
-NoExit -Command "Import-Module C:\dev\my-module\bin\Debug\netstandard2.0\my-module.dll"
- 将您的模块设置为启动项目
- 按 F5 开始调试。
我的公司有一个用 C# 编写的 .NET Powershell 模块,允许高级用户在我们的产品中自动执行任务。目前它以使用 .NET 4.6.1 的 Powershell 5 为目标。我们希望让使用其他操作系统的客户也能使用它,并且由于它没有 OS 特定代码,因此移植它很简单。
但是,我找不到有关应遵循的调试工作流程的文档。在标准的 .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 中通过附加到进程附加到 PID
这行得通,我已经用这种方法调试了一些问题,但这不是最令人愉快或最有效的方法。我相信一定有更好的方法,只是没有很好的记录。
我最初想出了一种基于脚本的方法,您可以在 post 的历史中看到它,但当时我不知道的是 CopyLocalLockFileAssemblies
属性 这使得调试目录看起来像以前在 .NET Framework 上工作时的样子。您只需要将此添加到 .csproj
中的 <PropertyGroup>
:
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
然后,调试设置与加载到第三方应用程序中的任何其他 .NET 模块一样:
- 右键单击您的 Powershell 模块项目并单击属性
- Select调试
- 将启动设置为可执行文件
- 可执行文件:
C:\Program Files\PowerShell\pwsh.exe
- 参数:
-NoExit -Command "Import-Module C:\dev\my-module\bin\Debug\netstandard2.0\my-module.dll"
- 将您的模块设置为启动项目
- 按 F5 开始调试。