C#使用反射工廠模式遇到System.TypeLoadException(類名錯誤導致)


項目中,在運行另一個反射類時出現問題,未能從程序集中加載類

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

新手設計,歡迎提出改進建議


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM