2009-12-09 32 views
7

Tôi tải một lắp ráp trong C# sử dụng phản ánh:động Tải hội và tự buộc con đường để có được lắp ráp tham chiếu

tài liệu tham khảo
Assembly = Assembly.Load([assembly_bytestream]); 

Việc lắp ráp được nạp thêm hai cụm. Để hiểu rõ suy nghĩ của tôi sẽ được tải lắp ráp chính và sau đó tìm kiếm GAC cho các hội đồng tham chiếu, nếu nó không thể tìm thấy nó ở đó, sau đó bạn có thể incorparate một sự kiện AssemblyResolve:

AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; 

Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) 
{ 
    if (args.Name.IndexOf([refAsm]) > -1) 
    { 
    Assembly shdocvw = Assembly.LoadFrom([dllPath]); 
    } 
} 

Có điều là, tôi không muốn đầu tiên nhìn vào GAC tôi muốn lực phản xạ để tải các hội đồng tham chiếu từ một con đường cụ thể tôi xác định. Có ý tưởng nào để làm việc này không?

Trả lời

4

Bạn có thể tự nạp các hội đồng phụ thuộc trước khi tải bản sao yêu cầu chúng.

+0

Hi Slaks Bạn đang nói rằng sự phản chiếu sẽ kiểm tra luồng bộ nhớ trước khi kiểm tra GAC? –

+0

Nếu lắp ráp đã được nạp, nó sẽ không cố gắng tải lại. – SLaks

+0

Âm thanh đủ đơn giản. Tôi sẽ thử cái này. Cảm ơn –

8

Để hiểu biết của tôi phản ánh sẽ được tải lắp ráp chính và sau đó tìm kiếm GAC cho các hội đồng tham chiếu

đúng, nhưng một chi tiết quan trọng: khuôn khổ sẽ tìm trong đường dẫn tìm kiếm các miền ứng dụng trước khi nhìn vào GAC. Thông thường, đường dẫn tìm kiếm tên miền ứng dụng chỉ bao gồm thư mục trong đó EXE chính được đặt, mặc dù bạn có thể định cấu hình ứng dụng của mình để tìm trong các thư mục con cụ thể, hoặc qua app.config hoặc bằng cách bắt đầu miền ứng dụng thứ hai và định cấu hình nó theo cách lập trình.

Các hội đồng được tham chiếu của bạn nằm ở đâu tương ứng với EXE của ứng dụng?

Chỉnh sửa: Tôi luôn tham khảo Suzanne Cook's assembly load cheat sheet khi gỡ lỗi các vấn đề như thế này. Phần còn lại của blog của cô có đầy đủ các thông tin hữu ích tương tự.

+0

Vâng, đây là ứng dụng ClickOnce để exe nằm dưới bộ nhớ cache ClickOnce của người dùng trong thư mục ứng dụng. Ứng dụng clickOnce gọi một dịch vụ web mà đi xuống một bytestream (lắp ráp trong câu hỏi). Các hội đồng được tham chiếu của hội đồng được đề cập nằm trong thư mục ứng dụng. –

+0

Vậy con đường cụ thể bạn muốn xem là gì? Vị trí ClickOnce gốc? Nếu vậy, điều này nên đã làm việc. Nếu nó không hoạt động, sẽ rất hữu ích khi thấy nhật ký tổng hợp gắn với ngoại lệ được kích hoạt bởi assembly không tải được. –

+0

Việc lắp ráp không tải thành công, nhưng nó tải từ gấc. Tôi muốn chỉ định đường dẫn. –

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