【发布时间】:2012-02-10 02:08:17
【问题描述】:
我正在为 CMS 编写一个插件,该插件使用 Assembly.load 动态加载插件程序集。
注意:出于无关的原因,前端静态加载程序集,而管理环境动态加载它。
我的插件有自己的 xml 配置文件,它会在第一次使用插件类时加载。使用XmlSerializer 将配置文件反序列化为对象对象。
当我通过前端静态加载程序集时,这种反序列化工作正常,但是当管理员尝试动态加载它时,我会从阅读器那里得到一个 NullReferenceException。
我尝试过使用Sgen预先生成序列化程序集,并将其添加到管理环境的“Bin”目录中,但这似乎没有效果。
堆栈跟踪:
[NullReferenceException: Object reference not set to an instance of an object.]
Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderAccessibilityConfig..cctor() +1156
[TypeInitializationException: The type initializer for 'Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderAccessibilityConfig' threw an exception.]
Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderAccessibilityConfig..ctor() +0
Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializerContract.get_Reader() +44
System.Xml.Serialization.TempAssembly.InvokeReader(XmlMapping mapping, XmlReader xmlReader, XmlDeserializationEvents events, String encodingStyle) +69
System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events) +101
[InvalidOperationException: There is an error in XML document (0, 0).]
System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events) +613
System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader) +30
CoA.WebUI.Controls.AccessibilityObjects.AccessibilityConfigBase`1.Deserialize(String xml) +196
CoA.WebUI.Controls.AccessibilityObjects.AccessibilityConfigBase`1.LoadFromFile(String fileName) +256
CoA.WebUI.Controls.Accessibility.Configure(Boolean isAdmin) +725
CoA.WebUI.Controls.Accessibility.GetProperties() +118
CMS.Admin.WebUI.CustomControlCreator.GetCustomControlProperties() +194
CMS.Admin.WebUI.CustomControlCreator.BindPropertyControls() +146
CMS.Admin.WebUI.CustomControlCreator.PageLoad() +164
CMS.Admin.WebUI.CustomControlCreator.Page_Load(Object sender, EventArgs e) +47
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +50
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627
奇怪的是,堆栈跟踪似乎表明 XML 文档为空,但我传入了一个我已调试并确认填充了正确文档的 StringReader - 它不是空的。
【问题讨论】:
-
这是我需要用调试器弄脏手的东西。
-
你是在告诉我,我昨天花了一天的时间来完成这一切,但我无法弄清楚。我真的真的不想编写自己的反序列化器,但它是这样的:(。
-
你试过 BinaryFormatter 吗?无论如何,我对 XmlSerializer 的运气并不好。
-
我很想尝试一下,不幸的是我希望我的配置文件是人类可读和可编辑的:(
-
试试
DataContractSerializer而不是BinaryFormatter。
标签: c# asp.net xml-serialization assemblies