我能够调试通过Visual Studio的添加到SSIS的自定义组件
Attach to Process
特色
但是,在SSIS包的脚本组件(即数据流中的C#脚本)内部执行自定义程序集时,是否可以调试该程序集?如果是,如何?
我尝试了以下操作,但没有成功:
-
使用断点生成程序集
(请参阅此问题底部的注释)
*
-
启动SSIS包并在断点处停止执行
-
将打开程序集文件的Visual Studio实例附加到正在运行SSIS包的DtsDebugHost.exe的执行实例
程序集文件中的所有断点都切换为:
当前不会命中断点。尚未为此文档加载任何符号。
我应该加载什么符号?我检查了模块窗口,但加载这三个程序集没有帮助,当我尝试加载两个SqlServer DTS程序集的符号时,它要求我选择一个具有相同文件名和文件类型的非常特定的文件,其中两个文件似乎都是临时文件名-我不知道在这里加载什么。
*注意:我在自定义程序集上设置了以下生成后事件:
"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.8"
copy $(TargetFileName) "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\CommonExtensions\Microsoft\SSIS\150\Binn"
更新1
在发布这个问题之前,我还尝试将程序集的源代码文件添加到脚本组件的,但这导致引发了与我试图调试的原始错误无关的其他错误。程序集内部有很多递归,它也有试图加载自己的程序集的代码。我无法确切地理解是什么导致了这些不相关的错误。所以,我放弃了那条路。
还有一点可能值得一提,如果不是为了程序员的幽默,这个程序集非常陈旧,几乎没有代码注释。当我在我们的代码回购中发现它的源代码时,它不会打开,因为它仍然是目标。NET Framework 2.0,甚至无法从Microsoft下载。我不得不升级它,所以我选择了。NET框架4.8。我尝试切换到4.7,因为脚本组件默认以4.7为目标,而且这种方式有些硬编码,因为每次我保存并重新打开它时,它都会降级回4.7。但是,两者都不是。NET Framework版本解决了我在脚本组件中调试程序集的能力。
因此,我采用了添加文本文件写行的方法,这些写行在出错之前输出代码到达的位置。这是调试IMHO的一种蹩脚方法。
更新2
我试图加载的符号
Microsoft.SqlServer.ManagedDTS.dll
并且打开的文件对话框窗口正在查找
Microsoft.SqlServer.ManagedDTS.pdb
或
Microsoft.SqlServer.ManagedDTS.dbg
。我进去了
C:\Program Files (x86)\
并运行以下操作:
-
dir /s /b Microsoft.SqlServer.ManagedDTS.pdb
-
dir /s /b Microsoft.SqlServer.ManagedDTS.dbg
但是,两者的反应都是
File Not Found
。有什么想法吗?