2010-03-12 107 views
1

我有一個vb.net 3.5應用程序引用一個DLL(abc.dll,也在.net 3.5中) 這個DLL是由應用程序不時訪問。如果在執行過程中的任何時候,如果我刪除了dll,我希望應用程序在下次嘗試使用dll中的類時發生錯誤。但是,這不是我所看到的行爲。如果我在啓動前刪除了dll,應用程序在啓動時會引發錯誤。但不是當啓動後刪除dll時。參考被刪除時會發生什麼?

這是標準行爲,還是我做錯了什麼? 如果在嘗試使用類時未找到dll,是否可以讓應用程序拋出錯誤?

在此先感謝。

+0

這是一個桌面應用程序 – Apeksha 2010-03-12 17:14:41

+0

是否要刪除啓動錯誤,並且如果使用了錯誤,或者*還有*如果程序集被刪除時發生錯誤? – 2010-03-12 17:26:00

回答

3

簡答題沒有。一旦DLL被加載,它就會被加載,直到使用該DLL的應用程序0123'從進程中卸載。只有這樣你才能刪除原始的DLL。

較長的答案:

這是一個複雜的問題,因爲它取決於DLL是如何被加載到進程。有幾種不同的方式可以發生這種情況

  • 直接從磁盤中卸載。這是我最不瞭解的一件事,但在這種情況下,CLR可能會對組件進行文件鎖定,因此應該可以根本刪除它。
  • 從影子目錄加載。在這種情況下,DLL實際上是從磁盤上的不同目錄加載的,以允許執行諸如刪除原始DLL之類的操作。這在Web應用場景中很受歡迎。在這種情況下,刪除原始DLL是沒有意義的,因爲重要的DLL是從一個臨時目錄中加載的.s
+0

謝謝JaredPar。 這是否意味着我的選擇是: 1)直接從磁盤加載dll而不是在我的項目中引用dll 2)在使用dll中的類之前檢查文件是否存在。 我不確定哪一個會更好。 – Apeksha 2010-03-12 17:12:53

+0

@Apeksha,如果被刪除的DLL是一個正常的場景,我認爲最好的方法是簡單地將該類的加載包裝在捕獲如果該DLL不存在的情況下發生的異常的方法中。這是處理這種情況最可靠的方法 – JaredPar 2010-03-12 17:14:39

0

錯誤總是發生在.NET框架嘗試加載引用的程序集時。所以看起來CLR決定在應用程序啓動時加載程序集。

相關問題