Xml序列化的調試開關(四)

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

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章