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標籤後,問題解決了。:)