我有一个c#
Windows窗体应用程序,使用.NET 3.5.
我的机器环境如下:
> Visual Studio 2010 Premium,SP1
> Windows 7 Professional,SP1
> 32位处理器
我有一个UserControl导出的自定义控件,其中包含一些其他UserControls.
我在Visual Studio的Windows窗体设计器中调出主要的UserControl,然后我开始点击各种嵌入式的UserControls,并随机更改一些属性,如文本.然后单击保存工具栏按钮.然后我继续对控件的属性进行更多更改,然后单击保存.
在一段时间之后(这不可预测),Visual Studio将显示一个错误对话框.
WinForms设计器显示一个带有“Microsoft Visual Studio”标题的模态对话框,并显示了一个两行消息:“值不能为空”参数名称:上下文“和”确定“按钮.
不幸的是,通过单击确定按钮关闭此对话框后,Visual Studio现在已经损坏了我的Form的设计者生成的代码.恢复代码的唯一方法是备份文件.
我发现唯一的解决方法是将属性窗口中的UserControl设置为false.这不是长期的解决方法,因为我需要这个UserControl可以在我们的生产代码中进行本地化.
我的项目相当简单,没有Web服务等
我尝试使用Visual Studio的另一个实例调试,看看是否可以捕获任何异常,但不会生成异常.没有任何重要的调试输出.
有没有人看到这个问题?寻找建议
更多信息…
我能够成功附加Visual Studio的第二个实例,并确定正在抛出异常. (我不得不取消选中“我的代码”调试选项,启用符号服务器等).
显然,当我单击WinForm设计器中的保存时,System.ArgumentNullException异常发生在System.dll中,方法System.ComponentModel.Design.Serialization.ContextStack.Push(对象上下文)中.所以,context参数是null,这是问题.仍然不知道为什么会发生这种情况.
这是堆栈跟踪:
System.dll!System.ComponentModel.Design.Serialization.ContextStack.Push(object context) + 0x88 bytes
System.Design.dll!System.ComponentModel.Design.Serialization.ResourceCodeDomSerializer.ApplyCacheEntry(System.ComponentModel.Design.Serialization.IDesignerSerializationManager manager = {System.ComponentModel.Design.Serialization.DesignerSerializationManager}, System.ComponentModel.Design.Serialization.ComponentCache.Entry entry) + 0x10e bytes
System.Design.dll!System.ComponentModel.Design.Serialization.ComponentCodeDomSerializer.Serialize(System.ComponentModel.Design.Serialization.IDesignerSerializationManager manager = {System.ComponentModel.Design.Serialization.DesignerSerializationManager}, object value = {ReveilleSystem.UserInterface.BoldLabel}) + 0xf64 bytes
System.Design.dll!System.Windows.Forms.Design.ControlCodeDomSerializer.Serialize(System.ComponentModel.Design.Serialization.IDesignerSerializationManager manager = {System.ComponentModel.Design.Serialization.DesignerSerializationManager}, object value = {ReveilleSystem.UserInterface.BoldLabel}) + 0x83 bytes
System.Design.dll!System.ComponentModel.Design.Serialization.CodeDomSerializerBase.SerializeToExpression(System.ComponentModel.Design.Serialization.IDesignerSerializationManager manager = {System.ComponentModel.Design.Serialization.DesignerSerializationManager}, object value = {ReveilleSystem.UserInterface.BoldLabel}) + 0x173 bytes
System.Design.dll!System.ComponentModel.Design.Serialization.TypeCodeDomSerializer.Serialize(System.ComponentModel.Design.Serialization.IDesignerSerializationManager manager = {System.ComponentModel.Design.Serialization.DesignerSerializationManager}, object root = {ReveilleSystem.UserInterface.WizardEditors.EditorBase}, System.Collections.ICollection members = {System.ComponentModel.ComponentCollection}) + 0x195 bytes
System.Design.dll!System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformFlush(System.ComponentModel.Design.Serialization.IDesignerSerializationManager manager = {System.ComponentModel.Design.Serialization.DesignerSerializationManager}) + 0x7e bytes
System.Design.dll!System.ComponentModel.Design.Serialization.BasicDesignerLoader.Flush() + 0x111 bytes
Microsoft.VisualStudio.Design.dll!Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.Flush() + 0xa0 bytes
System.Design.dll!System.ComponentModel.Design.DesignSurface.Flush() + 0x21 bytes
Microsoft.VisualStudio.Shell.Design.dll!Microsoft.VisualStudio.Shell.Design.DesignerWindowPane.OnFlush() + 0x33 bytes
Microsoft.VisualStudio.Shell.Design.dll!Microsoft.VisualStudio.Shell.Design.DesignerWindowPane.Microsoft.VisualStudio.Shell.Interop.IVsBatchUpdate.FlushPendingUpdates(uint reserved) + 0x2a bytes
Microsoft.VisualStudio.Editor.Implementation.dll!Microsoft.VisualStudio.Editor.Implementation.VsTextBufferAdapter.Microsoft.VisualStudio.Shell.Interop.IVsBatchUpdate.FlushPendingUpdates(uint dwReserved) + 0x97 bytes
Microsoft.VisualStudio.Editor.Implementation.dll!Microsoft.VisualStudio.Editor.Implementation.VsTextBufferAdapter.Save(string pszFilename = “C:\Temp\Reveille_KofaxMFP – Version 2\Editors\Connectivity.Designer.cs”, int fRemember = 1, uint nFormatIndex = 0) + 0x2f bytes
[Native to Managed Transition]
msenv.dll!DllUnregisterServer() + 0x10c990 bytes
[Frames below may be incorrect and/or missing, no symbols loaded for msenv.dll]
msenv.dll!DllUnregisterServer() + 0x10cce8 bytes
msenv.dll!DllUnregisterServer() + 0x3e1d6 bytes
[Managed to Native Transition]
Microsoft.VisualStudio.Editor.Implementation.dll!Microsoft.VisualStudio.Editor.Implementation.VsDocDataAdapter.SaveDocData(Microsoft.VisualStudio.Shell.Interop.VSSAVEFLAGS dwSave, out string pbstrMkDocumentNew, out int pfSaveCanceled) + 0x7e bytes
[Native to Managed Transition]
csproj.dll!DllGetClassObject() + 0x14e87 bytes
msenv.dll!DllUnregisterServer() + 0x12cbc9 bytes
msenv.dll!DllUnregisterServer() + 0x12c940 bytes
msenv.dll!VStudioTerm() + 0x4ab22 bytes
msenv.dll!VStudioMain() + 0x1bb97 bytes
msenv.dll!VStudioMain() + 0x1b74c bytes
msenv.dll!VStudioTerm() + 0x3ba6d bytes
msenv.dll!VStudioMain() + 0x1b8e1 bytes
[Managed to Native Transition]
Microsoft.VisualStudio.Shell.Design.dll!Microsoft.VisualStudio.Shell.Design.Serialization.DesignerDocDataService.LockedDocData.Save() + 0xbc bytes
Microsoft.VisualStudio.Shell.Design.dll!Microsoft.VisualStudio.Shell.Design.Serialization.DesignerDocDataService.Microsoft.VisualStudio.Shell.Interop.IVsRunningDocTableEvents.OnAfterSave(uint docCookie) + 0x124 bytes
[Native to Managed Transition]
msenv.dll!DllUnregisterServer() + 0xd6984 bytes
msenv.dll!DllUnregisterServer() + 0xd68f0 bytes
msenv.dll!DllUnregisterServer() + 0x12cc40 bytes
msenv.dll!DllUnregisterServer() + 0x12c940 bytes
msenv.dll!VStudioTerm() + 0x4ab22 bytes
msenv.dll!VStudioMain() + 0x1bb97 bytes
msenv.dll!VStudioMain() + 0x1b74c bytes
msenv.dll!VStudioTerm() + 0x3ba6d bytes
msenv.dll!VStudioMain() + 0x1b8e1 bytes
msenv.dll!DllUnregisterServer() + 0x34e5c bytes
msenv.dll!DllMain() + 0x5c5 bytes
msenv.dll!DllMain() + 0x2609d bytes
msenv.dll!DllMain() + 0x265a7 bytes
msenv.dll!DllUnregisterServer() + 0x170768 bytes
msenv.dll!DllUnregisterServer() + 0x1e56f8 bytes
msenv.dll!DllMain() + 0x1ea7f bytes
msenv.dll!DllMain() + 0x1e70b bytes
msenv.dll!DllUnregisterServer() + 0x170894 bytes
msenv.dll!DllUnregisterServer() + 0x378a71 bytes
msenv.dll!DllUnregisterServer() + 0x378bb8 bytes
msenv.dll!DllUnregisterServer() + 0x378aa1 bytes
msenv.dll!6861124f()
[Managed to Native Transition]
Microsoft.VisualStudio.Shell.10.0.dll!Microsoft.Internal.VisualStudio.PlatformUI.DataSource.Invoke(string verb, object pvaIn, out object pvaOut) + 0x21 bytes
Microsoft.VisualStudio.Shell.UI.Internal.dll!Microsoft.VisualStudio.PlatformUI.VsCommand.Execute(object parameter) + 0x29 bytes
PresentationFramework.dll!MS.Internal.Commands.CommandHelpers.CriticalExecuteCommandSource(System.Windows.Input.ICommandSource commandSource, bool userInitiated) + 0xb4 bytes
PresentationFramework.dll!System.Windows.Controls.Primitives.ButtonBase.OnClick() + 0x54 bytes
PresentationFramework.dll!System.Windows.Controls.Button.OnClick() + 0x4d bytes
PresentationFramework.dll!System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(System.Windows.Input.MouseButtonEventArgs e) + 0x9e bytes
PresentationCore.dll!System.Windows.UIElement.OnMouseLeftButtonUpThunk(object sender, System.Windows.Input.MouseButtonEventArgs e) + 0x6c bytes
PresentationCore.dll!System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(System.Delegate genericHandler, object genericTarget) + 0x31 bytes
PresentationCore.dll!System.Windows.RoutedEventArgs.InvokeHandler(System.Delegate handler, object target) + 0x29 bytes
PresentationCore.dll!System.Windows.RoutedEventHandlerInfo.InvokeHandler(object target, System.Windows.RoutedEventArgs routedEventArgs) + 0x3e bytes
PresentationCore.dll!System.Windows.EventRoute.InvokeHandlersImpl(object source = {Microsoft.VisualStudio.PlatformUI.VsButton}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}, bool reRaised = true) + 0xbe bytes
PresentationCore.dll!System.Windows.UIElement.ReRaiseEventAs(System.Windows.DependencyObject sender = {Microsoft.VisualStudio.PlatformUI.VsButton}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}, System.Windows.RoutedEvent newEvent) + 0x114 bytes
PresentationCore.dll!System.Windows.UIElement.OnMouseUpThunk(object sender, System.Windows.Input.MouseButtonEventArgs e) + 0xc5 bytes
PresentationCore.dll!System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(System.Delegate genericHandler, object genericTarget) + 0x31 bytes
PresentationCore.dll!System.Windows.RoutedEventArgs.InvokeHandler(System.Delegate handler, object target) + 0x29 bytes
PresentationCore.dll!System.Windows.RoutedEventHandlerInfo.InvokeHandler(object target, System.Windows.RoutedEventArgs routedEventArgs) + 0x3e bytes
PresentationCore.dll!System.Windows.EventRoute.InvokeHandlersImpl(object source = {Microsoft.VisualStudio.PlatformUI.VsButton}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}, bool reRaised = false) + 0xbe bytes
PresentationCore.dll!System.Windows.UIElement.RaiseEventImpl(System.Windows.DependencyObject sender = {Microsoft.VisualStudio.PlatformUI.VsButton}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}) + 0x79 bytes
PresentationCore.dll!System.Windows.UIElement.RaiseTrustedEvent(System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}) + 0x41 bytes
PresentationCore.dll!System.Windows.UIElement.RaiseEvent(System.Windows.RoutedEventArgs args, bool trusted) + 0x2c bytes
PresentationCore.dll!System.Windows.Input.InputManager.ProcessStagingArea() + 0x1ff bytes
PresentationCore.dll!System.Windows.Input.InputManager.ProcessInput(System.Windows.Input.InputEventArgs input) + 0x45 bytes
PresentationCore.dll!System.Windows.Input.InputProviderSite.ReportInput(System.Windows.Input.InputReport inputReport) + 0x62 bytes
PresentationCore.dll!System.Windows.Interop.HwndMouseInputProvider.ReportInput(System.IntPtr hwnd, System.Windows.Input.InputMode mode, int timestamp, System.Windows.Input.RawMouseActions actions, int x, int y, int wheel) + 0x2c2 bytes
PresentationCore.dll!System.Windows.Interop.HwndMouseInputProvider.FilterMessage(System.IntPtr hwnd = 1837128, MS.Internal.Interop.WindowMessage msg = WM_LBUTTONUP, System.IntPtr wParam = 0, System.IntPtr lParam = 2293872, ref bool handled = false) + 0x67d bytes
PresentationCore.dll!System.Windows.Interop.HwndSource.InputFilterMessage(System.IntPtr hwnd = 1837128, int msg = 514, System.IntPtr wParam = 0, System.IntPtr lParam = 2293872, ref bool handled = false) + 0x75 bytes
WindowsBase.dll!MS.Win32.HwndWrapper.WndProc(System.IntPtr hwnd = 1837128, int msg = 514, System.IntPtr wParam = 0, System.IntPtr lParam = 2293872, ref bool handled = false) + 0xbe bytes
WindowsBase.dll!MS.Win32.HwndSubclass.DispatcherCallbackOperation(object o) + 0x7d bytes
WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate callback, object args, int numArgs) + 0x53 bytes
WindowsBase.dll!MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(object source = {System.Windows.Threading.Dispatcher}, System.Delegate method, object args, int numArgs, System.Delegate catchHandler = null) + 0x42 bytes
WindowsBase.dll!System.Windows.Threading.Dispatcher.InvokeImpl(System.Windows.Threading.DispatcherPriority priority, System.TimeSpan timeout, System.Delegate method, object args, int numArgs) + 0xb4 bytes
WindowsBase.dll!MS.Win32.HwndSubclass.SubclassWndProc(System.IntPtr hwnd = 1837128, int msg = 514, System.IntPtr wParam = 0, System.IntPtr lParam = 2293872) + 0x104 bytes
user32.dll!gapfnScSendMessage() + 0x1cf bytes
user32.dll!gapfnScSendMessage() + 0x2cf bytes
user32.dll!gapfnScSendMessage() + 0x901 bytes
user32.dll!DispatchMessageW() + 0xf bytes
msenv.dll!DllGetClassObject() + 0x37521 bytes
msenv.dll!DllGetClassObject() + 0x375aa bytes
msenv.dll!DllCanUnloadNow() + 0x190f bytes
msenv.dll!DllCanUnloadNow() + 0x1840 bytes
msenv.dll!DllCanUnloadNow() + 0x17a1 bytes
msenv.dll!DllCanUnloadNow() + 0x176e bytes
msenv.dll!DllCanUnloadNow() + 0x16b0 bytes
msenv.dll!VStudioMain() + 0x78 bytes
devenv.exe!2fcb0637()
devenv.exe!2fcb0fd4()
devenv.exe!2fcb20d8()
devenv.exe!2fcb2148()
devenv.exe!2fcbea7f()
kernel32.dll!BaseThreadInitThunk() + 0x12 bytes
ntdll.dll!RtlInitializeExceptionChain() + 0xef bytes
ntdll.dll!RtlInitializeExceptionChain() + 0xc2 bytes
[UPDATE2]
我想我已经找到了我的问题的原因.
根据SLaks的建议,我重新检查了与我的UserControl相关联的X.Designer.cs文件.在X.Designer.cs中声明的还有其他几个控件(复选框,标签等),但实际上并没有出现在UI中.我怀疑当我使用WinForm编辑器开发我的UserControl时,我可能经历了几个添加/删除子控件的周期,在某些时候,一些这些子控件在X.Designer.cs文件中是孤立的.我回到我的UserControl(Localizable = False)的非本地化版本,然后删除所有孤立的子控件,然后重新编译,然后在WinForm Designer中打开UserControl,然后将Localizable设置为True,并保存所有内容.这似乎现在正在工作.如果这不是解决办法,我将来会更新这个.