項目中,在運行另一個反射類時出現問題,未能從程序集中加載類
class PopUpActionFactory { public static InterfacePopUpAction getAction(String actionName) { InterfacePopUpAction action = null; actionName = "XSheet.Data.PopUpAction.PopUpAction" + actionName; //XNamedTable try { Type type = Type.GetType(actionName, true); action = (InterfacePopUpAction)Activator.CreateInstance(type); } catch (Exception e) { Console.WriteLine(e.ToString()); System.Windows.Forms.MessageBox.Show("非法類型:" + actionName); } return action; } }
詳細錯誤:
引發的異常:“System.TypeLoadException”(位於 mscorlib.dll 中)
System.TypeLoadException: 未能從程序集“XSheet, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中加載類型“XSheet.Data.PopUpAction.PopUpActionSQLUpdate”。
在 System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName, ObjectHandleOnStack type)
在 System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName)
在 System.RuntimeType.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark)
嘗試一:
問題初步排查,應該是誇程序集導致,調用Factory的代碼,程序集是XSheet,而抽象工廠的程序集是XSheet.Data.PopUpAction
參考之前的成功的反射工廠,嘗試進行測試
1.將接口類提升至XSheet.Data(為了項目的簡潔,不將工廠類直接提升至XSheet)
2.設置中間類,是XSheet下的代碼通過中間執行類(程序集同為XSheet.Data),再調用反射工廠進行類的實例化
測試,同樣報錯,測試失敗
結果:
純屬失誤,通過但不調試,查看動態調用類的文本是PopUpActionSQLUpdate,放到程序中進行靜態調用,發現無法調用,自習檢查名稱,居然是拼寫錯誤,錯誤的將Action拼寫成了Aciton,之前還檢查過,結果沒發現。。。。。。
公司內部項目,非盈利,發布在GitHub上大家可以一起交流,促進項目進步
https://github.com/sd23152243/XSheet
新手設計,歡迎提出改進建議