You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Add-Type函数以DEBUG模式编译C#代码并实现调试

如何用Add-Type以Debug模式编译C#代码并调试

别担心,这个问题很好解决!Add-Type本身支持通过-CompilerParameters参数传递编译选项,我们只需要启用调试信息生成,再配合调试器就能实现断点调试了。下面是具体步骤和代码示例:

1. 修改Add-Type调用,启用Debug编译

首先,我们需要创建System.CodeDom.Compiler.CompilerParameters对象,开启调试信息生成,并指定必要的参数。替换你原来的代码为以下内容:

# 定义需要引用的程序集
$ReferencedAssemblies = @( 
    'System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 
    'Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 
    'System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 
    'System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 
    'System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 
)

# 创建编译参数对象,启用调试信息
$compilerParams = New-Object System.CodeDom.Compiler.CompilerParameters
$compilerParams.ReferencedAssemblies.AddRange($ReferencedAssemblies)
$compilerParams.GenerateDebugInfo = $true

# 可选:指定输出的程序集和PDB文件路径(默认会在临时目录,指定后更易管理)
$outputPath = Join-Path $PSScriptRoot "CompiledCode"
$compilerParams.OutputAssembly = Join-Path $outputPath "MyProgram.dll"
# 保留临时文件(避免编译后自动删除PDB)
$compilerParams.TempFiles = New-Object System.CodeDom.Compiler.TempFileCollection($outputPath, $true)

# 读取你的C#代码文件
$TypeDefinition = Get-Content -Path "$PSScriptRoot\Program.cs" -Raw

# 以Debug模式编译并加载类型
Add-Type -TypeDefinition $TypeDefinition -CompilerParameters $compilerParams

2. 在C#代码中添加调试触发点

为了让调试器能捕获到代码执行,你可以在Program.cs里需要调试的位置添加一行触发代码:

// 在需要调试的方法或代码块开头添加
System.Diagnostics.Debugger.Break();

当PowerShell执行到这一行时,会自动弹出调试器选择窗口,你可以选择Visual Studio(或其他支持.NET调试的工具)来开始调试。

3. 手动附加调试器(可选)

如果你不想用Debugger.Break(),也可以提前打开Visual Studio,按以下步骤操作:

  • 点击顶部菜单的调试 -> 附加到进程
  • 在进程列表中找到powershell.exe(Windows PowerShell)或pwsh.exe(PowerShell 7+)
  • 选中进程后点击附加,之后执行你的PowerShell脚本,调试器会命中你在C#代码中设置的断点

注意事项

  • 确保生成的.pdb文件和.dll文件在同一目录,否则调试器无法找到符号信息
  • 如果使用PowerShell Core,注意进程名是pwsh.exe,不要选错
  • 调试完成后,记得清理生成的dll和pdb文件(如果指定了输出路径的话)

内容的提问来源于stack exchange,提问作者fdafadf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:11:03