XML序列化錯誤:找不到檔案或程式集名稱“effvdqz0.dll”,或找不到它的一個依賴項
詳細的堆棧如下:
StackTrace " at System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Boolean isStringized, Evidence assemblySecurity, Boolean throwOnFileNotFound, Assembly locationHint, StackCrawlMark& stackMark)/r/n at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Boolean stringized, Evidence assemblySecurity, StackCrawlMark& stackMark)/r/n at System.Reflection.Assembly.Load(AssemblyName assemblyRef, Evidence assemblySecurity)/r/n at System.CodeDom.Compiler.CompilerResults.get_CompiledAssembly()/r/n at System.CodeDom.Compiler.CompilerResults.get_CompiledAssembly()/r/n at System.Xml.Serialization.Compiler.Compile()/r/n at System.Xml.Serialization.TempAssembly..ctor(XmlMapping[] xmlMappings)/r/n at System.Xml.Serialization.XmlSerializer.GenerateTempAssembly(XmlTypeMapping xmlTypeMapping)/r/n at System.Xml.Serialization.XmlSerializer..ctor(Type type, XmlAttributeOverrides overrides, Type[] extraTypes, XmlRootAttribute root, String defaultNamespace)/r/n at System.Xml.Serialization.XmlSerializer..ctor(Type type, XmlAttributeOverrides overrides)/r/n
上面那個dll即是.net動态生成的。為什麼會找不到呢?
通常的原因是,目前帳戶的臨時目錄下确實不能生成該dll,可能是權限的原因。
然而,還存在另一種原因。即:由于動态編譯失敗,是以dll沒有生成。如下場景下會發生這種事情:
我們知道,XML序列化支援類型重載。
當動态添加一個數組屬性的XmlElement标簽後,竟然發現GenerateTempAssembly方法生成的cs檔案中,會将該數組強行轉換為XmlElement标簽中的類型(是一個強類型數組),由于這中轉化必然是編譯不過的,是以就不會生成dll檔案,自然就會出現上面的問題。
解決辦法:
添加一個XmlElment标簽後,問題解決了。:)