我正在调试一个用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 [])加载程序集的调试符号,但在尝试从第三方库调试对象时仍然会出现异常。
答案 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具有相同的文件名来解决此问题。