我有一個類正在使用Oracle.DataAccess.dll(32位)在其方法中的類。這些方法在服務器上調用(32位)。沒有一個屬性類屬於Oracle.DataAccess.dllXmlSerializer試圖在.NET中加載不相關的DLL
在客戶端我們已經提到了相同的DLL,下面的代碼在32位機器中運行良好,但在64位機器中運行得不錯。
Type t = typeof(ClassA);
XmlSerializer s = new XmlSerializer(t);
在64位機器上得到以下錯誤:
System.BadImageFormatException: Could not load file or assembly 'Oracle.DataAccess, Version=2.111.7.20, Culture=neutral, PublicKeyToken=89b483f429c47342' or one of its dependencies. An attempt was made to load a program with an incorrect format.
File name: 'Oracle.DataAccess, Version=2.111.7.20, Culture=neutral, PublicKeyToken=89b483f429c47342'
at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializerContract.CanSerialize(Type type)
at System.Xml.Serialization.TempAssembly.LoadGeneratedAssembly(Type type, String defaultNamespace, XmlSerializerImplementation& contract)
at System.Xml.Serialization.XmlSerializer..ctor(Type type, String defaultNamespace)
爲什麼CLR試圖儘管沒有屬於DLL任何財產要加載的類Oracle.DataAccess.dll?
EDIT 當我們通過一個空XmlAttributeOverrides異常沒有發生
XmlAttributeOverrides o = new XmlAttributeOverrides();
XmlSerializer s = new XmlSerializer(t, o);
當您傳遞'XmlAttributeOverrides'時,XML序列化程序總是從頭創建一個新的臨時程序集,並且不檢查緩存的或預先生成的序列化程序集程序集。你是否預先生成這些? –
不,我們不會預先生成 – Brij
其實不管你做什麼都沒關係。新的XmlSerializer(t)和新的XmlSerializer(t,o)採用稍微不同的代碼路徑,在後一種情況下,拋出引用異常的方法從不會被調用。不過,我懷疑生成的序列化程序是否可行。 –