调试动态加载程序集

时间:2011-10-20 13:34:13

标签: .net vb.net dynamic assemblies

我正在调试一个用Assembly.Load(Byte[])动态加载的程序集,但是我遇到了一些问题。

首先,我无法移动Visual Studio 2010中的黄色箭头以进入其他代码行,而且我还在尝试执行异常操作(“无法在对象实例上找到方法。”)快速观察来自第三方库的对象(例如,来自Infragistics的控件。)

Dim data = My.Computer.FileSystem.ReadAllBytes(file.FullName)
Assembly.Load(data)

使用Assembly.Load(String)时,一切正常,没有问题。

Assembly.Load(IO.Path.GetFileNameWithoutExtension(file.Name))

知道为什么这种行为会有很大的不同?无论如何要解决这个问题?

我尝试使用Assembly.Load(byte [] .byte [])加载程序集的调试符号,但在尝试从第三方库调试对象时仍然会出现异常。

2 个答案:

答案 0 :(得分:12)

程序集的调试符号未加载到应用程序域中。当您使用字符串变种时,.NET会自动在您指定的文件名旁边查找.PDB。

要从字节数组加载程序集,请使用Assembly.Load(byte[], byte[]),如下所示:

Dim data = My.Computer.FileSystem.ReadAllBytes(file.FullName)
Dim pdbData = My.Computer.FileSystem.ReadAllBytes(pdbFile.FullName)
Assembly.Load(data, pdbData)

答案 1 :(得分:1)

当你传递一个字节数组时,无法知道它来自哪个文件(或者它是否来自文件),因此无法找到包含源代码行信息的PDB文件。

您可以通过将byte[]保存为文件并确保其中的PDB具有相同的文件名来解决此问题。