2012-10-22 26 views
6

Tôi đang tạo một plugin cho một sản phẩm tải plugin DLL bằng cách sử dụng Assembly.Load(byte[]). Đây là tất cả rất tốt và tốt, nhưng nó có nghĩa là tôi không có phương tiện thông thường của tải các biểu tượng gỡ lỗi để bước qua mã của tôi.Làm thế nào để gỡ lỗi một assembly được nạp thông qua Assembly.Load (byte [])?

Điều điên rồ là, vài tháng trước tôi đã gặp vấn đề tương tự và giải quyết nó - và cậu bé tự hào về bản thân mình! Vì vậy, tôi biết nó có thể được thực hiện, tôi chỉ quên làm thế nào!

Tôi có một vài ký ức mơ hồ về những điều tôi có thể đã cố gắng, nhưng tôi không thể trêu chọc các chi tiết ra khỏi đầu của tôi:

  • NET Reflector
    • Có lẽ sai mặc dù bởi vì tôi nhớ rõ ràng bước qua cs gốc nộp
  • Sử dụng IIS nhanh hơn Cassini
    • Nhưng điều này đập vào mắt tôi như một đập d giải pháp - lắp ráp được nạp từ một mảng byte, do đó, khuôn khổ không biết gì về nơi DLL đến từ hoặc những gì một PDB thích hợp có thể trông giống như nếu nó nhìn thấy một. Vấn đề này nên tồn tại trong bất kỳ môi trường nào.
  • tải những biểu tượng bằng tay qua cửa sổ "Modules"
    • Cố gắng này; Tôi nhận được "Các tập tin biểu tượng xxxxx.pdb không phù hợp với mô-đun" - bởi vì, tất nhiên, chúng tôi đang tải từ một mảng byte, không phải là DLL chính nó.
+0

Có thể bạn đã sử dụng quá tải tải (byte [], byte []). –

+0

Tôi rất muốn có thể làm điều đó, nhưng sản phẩm là nguồn đóng. Tôi biết 'Assemly.Load (byte [])' đang được sử dụng bởi vì tôi đã sử dụng Reflector. Tôi * có thể * yêu cầu họ sử dụng 'byte [], byte []' và kiểm tra tệp .pdb, nhưng sau đó tôi phải chờ ai biết được bản phát hành tiếp theo bao lâu (giả sử nó được chấp thuận). Cảm ơn mặc dù :) –

+0

Lắp ráp của bạn được đặt tên mạnh mẽ? –

Trả lời

1

Nếu lắp ráp của bạn được đặt tên mạnh, bạn có thể lắp ráp trong GAC. Các cụm được đặt tên mạnh là luôn là được tải từ GAC, ngay cả khi nó được tải qua Assembly.Load(byte[]). Sau đó, chỉ cần đặt các biểu tượng của bạn vào C:\Windows\symbols\dll hoặc nơi thuận tiện. Tôi làm điều này tất cả các thời gian để gỡ lỗi DLL của sản phẩm riêng của chúng tôi được tải bởi một ứng dụng khác theo cách tương tự.

Bạn có thể sử dụng gacutil để cài đặt nó trong GAC. Hãy nhớ gỡ bỏ nó khi bạn đã hoàn thành việc gỡ lỗi hoặc bạn có thể sẽ chạy thử nghiệm với một phiên bản cũ mà GAC'd đã quên và quên.

Các vấn đề liên quan