我有一个基于WinForms的应用程序。它正在编译和运行完美。 问题是,从昨天开始,我无法打开主窗体的设计器文件 起初我认为这是由于我添加了以下调用:
StyleManager.Load("some isl file");
我删除了它,我撤消了对文件的更改,什么都没有。
我得到的错误是来自XmlDocument.LoadXml()
调用的“Root element is missing”。源是实际尝试加载xml文件的方法,但仅在运行时执行此操作。
如果我忽略了这条消息,我得到一个“对象引用未设置为对象的实例”错误,并且忽略了这一点,我得到“设计器已经加载”。
更新
如果我注释掉了应该读取xml的方法的委托注册(在InitializeComponent()
中),则不会发生问题。
我们在我们的解决方案中使用Infragistics,并在堆栈跟踪中提及它们。
在System.Xml.XmlTextReaderImpl.Throw(例外e) 在System.Xml.XmlTextReaderImpl.ThrowWithoutLineInfo(String res) 在System.Xml.XmlTextReaderImpl.ParseDocumentContent() 在System.Xml.XmlTextReaderImpl.Read() 在System.Xml.XmlLoader.Load(XmlDocument doc,XmlReader reader,Boolean preserveWhitespace) 在System.Xml.XmlDocument.Load(XmlReader阅读器) 在System.Xml.XmlDocument.LoadXml(String xml) at MyApp.Utilities.Xml.Load(String str) at Editor.Editor.tabFlowView_ActiveTabChanged(Object sender,ActiveTabChangedEventArgs e) 在Infragistics.Win.UltraWinTabControl.UltraTabControlBase.OnActiveTabChanged(ActiveTabChangedEventArgs e) 在Infragistics.Win.UltraWinTabControl.UltraTabControlBase.RaiseEvent(UltraTabControlEventId id,EventArgs e) 在Infragistics.Win.UltraWinTabControl.UltraTabControlBase.set_ActiveTab(UltraTab值) at Infragistics.Win.UltraWinTabControl.UltraTabControlBase.OnManagerSelectedTabItemChanging(Object sender,SelectedTabItemChangingEventArgs e) 在Infragistics.Win.UltraWinTabs.TabManager.set_SelectedTabItem(ITabItem值) 在Infragistics.Win.UltraWinTabControl.UltraTabControlBase.SetSelectedTab(UltraTab选项卡) 在Infragistics.Win.UltraWinTabControl.UltraTabControlBase.PerformAction(UltraTabControlAction actionCode) 在Infragistics.Win.UltraWinTabControl.UltraTabControlBase.PerformDelayedInitialize() 在Infragistics.Win.UltraWinTabControl.UltraTabControlBase.OnCreateControl() 在System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) 在System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) 在System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) 在System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) 在System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) 在System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) 在System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) 在System.Windows.Forms.Control.CreateControl() 在System.Windows.Forms.Control.ControlCollection.Add(控制值) 在System.Windows.Forms.Form.ControlCollection.Add(控制值) 在System.Windows.Forms.Design.ControlDesigner.DesignerControlCollection.Add(Control c)
答案 0 :(得分:3)
我在表单上使用UserControl时特别发生此错误。如果你正在做一些需要“活动连接”的东西,它会抛出它无法解决的异常。
在您的情况下,它似乎正在调用ActiveTabChanged事件,该事件正在调用load xml。在xml加载调用之前加载xml add之前。
if (DesignMode) return;
答案 1 :(得分:1)
您似乎要么尝试在窗体的构造函数中加载某些xml,要么在任何子控件的构造函数中加载。其中一个构造函数导致的任何异常都可能导致此问题。
答案 2 :(得分:1)
如果你的表单构造函数中有东西并且它抛出异常,那么你会得到奇怪的行为。将InitializeComponent()保存在表单ctor中,如果可能的话,将其余的初始化移动到Form_Load()事件处理程序。
我已经看到了有关缺少根元素的错误。有时,人们并不真正阅读例外提供的基本信息。也许发布您的XML文件会有所帮助,也许它确实缺少根元素:
<?xml version="1.0 .... >
<MyRootElement>
<Child>
</Child>
</MyRootElement>
答案 3 :(得分:0)
您是否正在使用任何第三方工具或您在工具箱中自定义的任何内容?当我更新第三方工具集或从工具箱中删除某些内容时,我遇到了这个问题。
答案 4 :(得分:0)
我已经看过几次并且难倒了几次。您是否在构造函数中进行除InitializeComponent()之外的任何调用?
将它们移动到窗体(或Load)的Shown部分,加载设计时将调用Constructor。可能是Infragistics元素正在尝试加载尚未就绪的XML。
您的表单中是否有任何UserControl?这些也将在设计时针对构造函数执行并造成破坏。
答案 5 :(得分:0)
tabFlowView_ActiveTabChanged,你的方法还是内部的infragistics?该方法中的某些东西试图加载失败的xml。
如果是你的代码,那么在方法的开头看看是否能解决它:
if (DesignMode)
return;