SSIS:如何调试脚本组件中引用的自定义程序集
调试SSIS脚本组件调用的自定义程序集操作方案
核心问题说明
你遇到的符号加载失败问题,本质是SSIS运行时加载的自定义程序集对应的PDB符号文件没有被附加调试的VS实例识别,不需要加载Microsoft.SqlServer.ManagedDTS这类SQL Server官方程序集的符号,仅需确保你自己开发的自定义程序集符号正确加载即可。
具体操作步骤
- 调整自定义程序集生成配置
切换项目到Debug模式,在生成高级选项里将调试信息输出格式设置为完整,确保生成时会同时产出dll和对应的pdb符号文件。 - 更新生成后事件,同步复制pdb文件
你原来的生成后事件仅复制了dll文件,需要补充pdb文件的复制逻辑,修改后的生成后事件参考:
"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\gacutil.exe" -u $(TargetName) "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\gacutil.exe" -i $(TargetFileName) copy $(TargetFileName) "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7" copy $(TargetPdbName) "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7" copy $(TargetFileName) "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\CommonExtensions\Microsoft\SSIS\150\Binn" copy $(TargetPdbName) "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\CommonExtensions\Microsoft\SSIS\150\Binn"
- 匹配.NET Framework版本
SSIS 2019的脚本组件默认强制使用.NET Framework 4.7,将你的自定义程序集目标框架固定为.NET Framework 4.7,避免版本不匹配导致符号加载失败。 - 按正确顺序附加进程
先打开自定义程序集的源码项目,在SSIS包的脚本组件中先打一个断点,启动SSIS包执行,等待脚本组件的断点命中暂停后,再切回自定义程序集的VS实例,附加到对应的DtsDebugHost.exe进程(注意区分32位/64位进程,不要选错)。 - 手动加载符号(自动加载失败时备用)
附加进程后,在VS的模块窗口(调试->窗口->模块)找到你自己的自定义程序集,右键选择「加载符号」,定位到SSIS Binn目录下对应的pdb文件即可。
应急调试方案
如果以上操作还是无法命中断点,可以在自定义程序集的入口代码处加入System.Diagnostics.Debugger.Launch();,运行时会自动弹出调试器选择窗口,直接选择打开自定义程序集源码的VS实例,即可自动关联符号命中断点,调试完成后删除这段代码即可。
内容的提问来源于stack exchange,提问作者J Weezy
相关产品推荐
相关产品推荐

