2014-03-02 51 views
2

我需要獲取我的程序集所需的CLR版本,然後再刪除程序集。每一個單獨的是微不足道的,但如果我想要做他們兩個我遇到問題:獲取我需要加載程序集的ImageRuntimeVersion屬性的值。這可以防止我刪除文件,因爲它說文件正在使用中。我嘗試在單獨的appdomain中加載該文件,但失敗慘不忍睹(例如,出現了一些錯誤,即使使用將byte []作爲參數或另一個錯誤的構造函數加載該文件也無法找到該文件:SecurityException說有關RegistryPermission )。從程序集中獲取所需的運行時版本

回答

1

你可以只將程序集讀入內存流並加載它嗎?它應該可以避免鎖定原始程序集,但是從其他註釋中可以看出,這會導致鏈接的程序集鎖定。

然後,您要刪除的程序集只是一個斷開連接的文件,因此在讀完它後將其刪除之後,您應該可以將其刪除。

+0

+1。注意:如果您不需要將相同/相似的程序集加載到相同的應用程序域中,則此方法沒有問題,否則很有可能下一個加載程序不會選擇正確的二進制文件。如果您需要使用相同的全名加載程序集,唯一真正的選擇是將其加載到新的AppDomain中,並在獲得必要信息後立即銷燬該新的AppDomain。 –

+0

這種方法似乎可行,但我需要在程序集更改時檢查方案(是否正確拾取新版本)。 @AlexeiLevenkov - 我如何實際將程序集加載到新的AppDomain中? –

+0

@TomaszGrobelny訣竅是在新的AppDomain中運行加載代碼。相關的問題涵蓋了這一點,http://stackoverflow.com/questions/1468151/appdomain-unload-doesnt-release-the-assembly-i-loaded-up-with-reflection?rq=1似乎有適當的樣本。 –

相關問題