2011-10-20 17 views
5

Jestem debugowania zespołu, który załadowałem dynamicznie z Assembly.Load(Byte[]), ale mam do czynienia z niektórymi problemami.Debugowanie dynamicznie załadowany zespół

Po pierwsze, nie mogę przenieść żółtej strzałki w Visual Studio 2010, aby przejść do innych linii kodu, a także dostaję wyjątki ("Nie mogę znaleźć metody na instancji obiektu"), gdy próbuję zrobić szybki zegarek na obiektach z trzeciego biblioteki Party (formantów Infragistics na przykład.)

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

Podczas korzystania Assembly.Load(String), wszystko działa w porządku, i nie ma problemów.

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

Każdy pomysł, dlaczego zachowanie jest tak różne? W każdym razie to naprawić?

Próbowałem ładować symbole debugowania dla mojego zestawu za pomocą Assembly.Load (byte []. Byte []), ale nadal dostaję wyjątki podczas próby debugowania obiektów z bibliotek stron trzecich.

Odpowiedz

10

Symbole debugowania dla zespołu nie są ładowane do domeny aplikacji. Gdy używasz odmiany ciągów, .NET automatycznie szuka .PDB wraz z podaną nazwą pliku.

Aby załadować zespół i swoje symbole z tablicami bajtów, należy Assembly.Load(byte[], byte[]), tak:

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

Próbowałem tego i symbole został załadowany, ale mam jeszcze problemy z klas/obiektów z zależnościami tego zgromadzenia. –

+0

Będziesz musiał również ręcznie załadować zależności. Subskrypcja zdarzenia [AssemblyResolve] (http://stackoverflow.com/questions/22012/loading-assemblies-and-its-dependencies/22026#22026) może być pomocna w Twoim przypadku. – ladenedge

+0

Twoje poprawne, dziękuję –

1

Po przekazaniu tablicy bajtów nie można ustalić, z jakiego pliku pochodzi (lub nawet pochodzi z pliku), więc nie może zlokalizować pliku PDB za pomocą informacji o linii kodu źródłowego.

Możesz to naprawić, zapisując plik byte[] i upewniając się, że jest tam plik PDB o tej samej nazwie pliku.

Powiązane problemy