powershell - Powershell Core 模块的适当调试工作流程是什么?

标签 powershell debugging .net-core powershell-cmdlet powershell-core

我的公司有一个用 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 模块一样:

  1. 右键单击您的 Powershell 模块项目并单击属性
  2. 选择调试
  3. 将启动设置为可执行
  4. 可执行文件:C:\Program Files\PowerShell\6\pwsh.exe
  5. 参数:-NoExit -Command "Import-Module C:\dev\my-module\bin\Debug\netstandard2.0\my-module.dll"
  6. 将您的模块设置为启动项目
  7. 按 F5 开始调试。

关于powershell - Powershell Core 模块的适当调试工作流程是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52156047/

相关文章:

debugging - 有没有办法使用eclipse调试hadoop的namenode或datanode?

c# - 是否可以在 Asp.net Core 解决方案的单独层中管理 DBContext 的注入(inject)

powershell - 在 Windows 10 上通过 ssh 在 cygwin 上获得 rsync 的神奇组合

linux - 如何在 Linux 上区分调试和发布可执行文件

c# - 如何使用与其他 DLR 语言类似的 API 在 c# 应用程序中托管 PowerShell 3.0

c++ - 我有反作弊程序 SSDT Hook 地址,但如何恢复它们?

c# - 在 Entity Framework Core 中创建迁移时如何配置 DbContext?

c# - 控制台应用程序中的 .NET Core 全局异常处理程序

java - 为什么PowerShell会显示 'Cannot find symbol'错误,但是VS Code Java Process Console可以很好地运行它?

powershell - 运行命令而不将其添加到历史记录中