Отладка динамически загружаемой сборки - PullRequest
7 голосов
/ 20 октября 2011

Я отлаживаю сборку, которую я загружал динамически с помощью 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 ]

12 голосов
/ 20 октября 2011

Символы отладки для вашей сборки не загружаются в домен приложения. Когда вы используете разнообразие строк, .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 голос
/ 20 октября 2011

Когда вы передаете ему массив байтов, невозможно узнать, из какого он файла (или даже из файла), поэтому он не может найти файл PDB с информацией строки исходного кода.

Это можно исправить, сохранив byte[] в виде файла и убедившись, что для него есть PDB с тем же именем файла.

...