[英]How to provide a fallback assembly instead of the one that can't be loaded?
在運行時,如果引用的程序集無法加載,例如“強名稱驗證失敗”(因為它是經過測試簽名的),是否有辦法從另一個實際簽名的路徑提供替換程序集?
我嘗試訂閱AppDomain.CurrentDomain.AssemblyResolve,但它沒有被觸發,因為“壞”程序集技術上存在,它只是無法加載。
在無法加載程序集時,是否存在提供回退程序集的通用方法?
是什么觸發了加載嘗試? 你怎么稱呼Assembly.Load或這是類型解析嘗試的結果? 如果是后者,您可以嘗試使用AppDomain TypeResolve事件,如果是前者 - 您可以在調用Assembly.Load時添加其他邏輯。
如果您手動加載程序集,但確保使用Assembly.Load加載它 - 而不是Assembly.LoadFrom。 類型分辨率存在細微差別,具體取決於加載的上下文程序集
我想你可以調用assembly.LoadFrom加載你選擇的程序集,幾乎沒有安全檢查。 我們在應用程序開始時就這么做了很多,所以我們可以更好地處理其他程序集版本更改。
另請參閱Assembly.LoadFrom方法(String,Evidence,Byte [],AssemblyHashAlgorithm)看起來您可以控制傳遞哈希以及哈希算法。
看起來我想要的是不可能的。 我決定走另一條路。 我們必須修改構建系統,以便在編譯時有條件地鏈接到已簽名的二進制文件而不是測試簽名的二進制文件。
謝謝大家的建議!
在應用程序無法執行此操作時,有一種標准方法可以找到程序集:
// register on assembly resolve exception
AppDomain.CurrentDomain.AssemblyResolve += ResolveEventHandler;
// try to load the assembly yourself
private static Assembly ResolveEventHandler(object sender, ResolveEventArgs args)
{
return Assembly.Load(some_location);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.