3 回答

TA貢獻1887條經(jīng)驗 獲得超5個贊
就像Martin Sherburn所說,這是正常的行為。XmlSerializer的構造函數(shù)首先嘗試查找名為[YourAssembly] .XmlSerializers.dll的程序集,該程序集應包含用于序列化類型的生成類。由于尚未生成此類DLL(默認情況下不是這樣),因此拋出FileNotFoundException。當發(fā)生這種情況時,XmlSerializer的構造函數(shù)捕獲該異常,并且XmlSerializer的構造函數(shù)在運行時自動生成DLL(這是通過在計算機的%temp%目錄中生成C#源文件,然后使用C#編譯器編譯它們來完成的)。對于相同類型的XmlSerializer的其他構造將僅使用已經(jīng)生成的DLL。
更新:從.NET 4.5開始,
XmlSerializer
不再執(zhí)行代碼生成,也不使用C#編譯器執(zhí)行編譯,以便在運行時創(chuàng)建序列化程序程序集,除非通過設置配置文件設置(useLegacySerializerGeneration)顯式強制執(zhí)行。此更改消除了依賴性csc.exe
并提高了啟動性能。來源:.NET Framework 4.5自述文件,第1.3.8.1節(jié)。
該異常由XmlSerializer的構造函數(shù)處理。您無需自己做任何事情,只需單擊“繼續(xù)”(F5)繼續(xù)執(zhí)行您的程序,一切都會好的。如果您對停止執(zhí)行程序并彈出異常幫助程序的異常感到困擾,則可以關閉“Just My Code”,或者將FileNotFoundException設置為在拋出時執(zhí)行,而不是在“User-未處理”。
要啟用“Just My Code”,請轉到工具>>選項>>調試>>常規(guī)>>啟用我的代碼。要在拋出FileNotFound時關閉執(zhí)行中斷,請轉到Debug >> Exceptions >> Find >> enter'FileNotFoundException'>>取消選中System.IO.FileNotFoundException中的'Thrown'復選框。

TA貢獻1906條經(jīng)驗 獲得超3個贊
有一個解決方法。如果你使用
XmlSerializer lizer = XmlSerializer.FromTypes(new[] { typeof(MyType) })[0];
它應該避免這種例外。這對我有用。
警告: 不要多次使用,否則會有內(nèi)存泄漏
如果你使用這種方法XmlSerializer
多次創(chuàng)建同一類型的實例,你會像瘋了一樣泄漏內(nèi)存!
這是因為此方法繞過了提供者XmlSerializer(type)
和XmlSerializer(type, defaultNameSpace)
構造函數(shù)(所有其他構造函數(shù)也繞過緩存)的內(nèi)置緩存。
如果您使用任何方法來創(chuàng)建不通過這兩個構造函數(shù)的XmlSerializer,您必須實現(xiàn)自己的緩存,否則您將出血。
- 3 回答
- 0 關注
- 790 瀏覽
添加回答
舉報