2011-02-24

Is there an Assembly.Unload method?

Is there an Assembly.Unload method?

Bạn develop bằng .NET, đã làm một số các ứng dụng. Đã có khi bạn đặt câu hỏi: có hay không method cho phép unload một assembly đã loaded, hay nói cho đơn giản bạn muốn replace một dll, nhưng dll này đang sử dụng bởi chính ứng dụng muốn replace, vì thế sẽ không overwrite được ... Có nhiều mục đích cần đạt được như thay thế version mới, cập nhật config file ... sẽ dẫn đến câu hỏi này.

Mình đã từng gặp chuyện này khi đụng đến việc apply config file. Câu trả lời là không. Nhưng tại sao trong khi với unmanaged code có thể LoadLibrary rồi FreeLibrary? Bữa nay có người hỏi nên nhắc lại. Có rất nhiều article trên net viết về vấn đề này.

Trên Stackoverflow
http://stackoverflow.com/questions/123391/how-to-unload-an-assembly-from-the-primary-appdomain

Jason Zander's WebLog
http://blogs.msdn.com/b/jasonz/archive/2004/05/31/145105.aspx

Suzanne Cook's blog
http://blogs.msdn.com/b/suzcook/archive/2003/07/08/57211.aspx

Như vậy cách giải quyết như thế nào. Câu trả lời là hãy design ứng dụng dựa vào app domain, việc unload với app domain được hỗ trợ fully.

1. Tạo app domain
2. Load assembly cần sự dụng
3. Thực hiện something với assembly
4. Unload app domain

Về code thì chịu khó search với Google.
Tất nhiên là lý thuyết nó như vậy, nhưng thực tế thì mình cũng chưa bao giờ phải design cái gì như thế và cũng không thích là gì xiên xẹo với app domain.

Nice developing,