Tôi đang sử dụng khung tùy chỉnh sử dụng phản chiếu để thực hiện GetTypeByName(string fullName)
trên tên loại đủ điều kiện mà nó lấy từ cơ sở dữ liệu, để tạo một thể hiện kiểu đã nói và thêm nó vào trang, dẫn đến một loại mô-đun chuẩn.Lắp ráp không có sẵn sau khi thay đổi Web.config
GetTypeByName
là một chức năng tiện ích của tôi chỉ đơn giản là lặp qua Thread.GetDomain().GetAssemblies()
, sau đó thực hiện một assembly.GetType(fullName)
để tìm loại có liên quan. Rõ ràng kết quả này được lưu trữ để tham khảo và tốc độ trong tương lai. Tuy nhiên, tôi đang gặp phải một số vấn đề trong đó nếu web.config được cập nhật (và trong một số trường hợp hiếm hoi hơn nếu hồ bơi ứng dụng được tái chế) thì nó sẽ mất tất cả kiến thức của một số cụm, dẫn đến không có khả năng hiển thị một thể hiện của loại mô-đun. Gỡ lỗi cho thấy rằng các hội đồng bị mất nghĩa đen không tồn tại trong danh sách hội đồng chủ đề hiện tại.
Để giải quyết vấn đề này, tôi đã thêm một lần kiểm tra thứ hai hơi bẩn nhưng đệ quy thông qua các tệp DLL/thư mục/và kiểm tra xem mỗi tệp có tồn tại trong danh sách hội đồng hay không. Nếu không, nó tải nó bằng cách sử dụng Assembly.Load và sửa vấn đề ngữ cảnh nhờ 'Solving the Assembly Load Context Problem'. Điều này sẽ làm việc, chỉ có vẻ như là (và tôi biết điều này không nên có thể) một số dự án vẫn có quyền truy cập vào hội đồng bị mất, ví dụ dự án web thực tế của tôi chứ không phải là khung chính nó - và sau đó nó than phiền rằng tài liệu tham khảo trùng lặp đã được thêm vào!
Có ai từng nghe về bất cứ điều gì như thế này không, hoặc có bất kỳ ý tưởng nào tại sao một hội đồng sẽ đơn giản rơi ra khỏi sự tồn tại trên một thay đổi cấu hình? Ngắn của một giải pháp, cách giải quyết thanh lịch nhất để có được tất cả các hội đồng trong bin để tải lại là gì? Nó cần phải được tất cả trong một "hit" để các khách truy cập trang web không thấy bất kỳ sự khác biệt khác hơn là một sự chậm trễ nhỏ, do đó, một tập tin app_offline.htm là ra câu hỏi. Đổi tên một cách có lập trình một DLL trong thùng và sau đó đặt tên nó trở lại không hoạt động, nhưng yêu cầu quyền "sửa đổi" cho tài khoản người dùng IIS, mà là điên.
Cảm ơn mọi con trỏ mà cộng đồng có thể thu thập!
@ tags2k Có thể đặt liên kết để tải xuống tệp dll gây ra sự cố, để kiểm tra nó với bộ phản xạ, vào thời điểm xảy ra lỗi (aka trên GetTypeByName). – Aristos