2
我需要獲取我的程序集所需的CLR版本,然後再刪除程序集。每一個單獨的是微不足道的,但如果我想要做他們兩個我遇到問題:獲取我需要加載程序集的ImageRuntimeVersion屬性的值。這可以防止我刪除文件,因爲它說文件正在使用中。我嘗試在單獨的appdomain中加載該文件,但失敗慘不忍睹(例如,出現了一些錯誤,即使使用將byte []作爲參數或另一個錯誤的構造函數加載該文件也無法找到該文件:SecurityException說有關RegistryPermission )。從程序集中獲取所需的運行時版本
+1。注意:如果您不需要將相同/相似的程序集加載到相同的應用程序域中,則此方法沒有問題,否則很有可能下一個加載程序不會選擇正確的二進制文件。如果您需要使用相同的全名加載程序集,唯一真正的選擇是將其加載到新的AppDomain中,並在獲得必要信息後立即銷燬該新的AppDomain。 –
這種方法似乎可行,但我需要在程序集更改時檢查方案(是否正確拾取新版本)。 @AlexeiLevenkov - 我如何實際將程序集加載到新的AppDomain中? –
@TomaszGrobelny訣竅是在新的AppDomain中運行加載代碼。相關的問題涵蓋了這一點,http://stackoverflow.com/questions/1468151/appdomain-unload-doesnt-release-the-assembly-i-loaded-up-with-reflection?rq=1似乎有適當的樣本。 –