У меня есть приложение С# Windows Forms, использующее .NET 3.5.
Моя машинная среда выглядит следующим образом:
- Visual Studio 2010 Premium, SP1
- Windows 7 Professional, SP1
- 32-разрядный процессор
У меня есть пользовательский элемент UserControl, который содержит несколько других UserControls.
Я открываю основной UserControl в Windows Forms Designer в Visual Studio, затем начинаю нажимать на различные встроенные UserControls и произвольно изменять некоторые свойства, например Текст. Затем я нажимаю кнопку Сохранить. Затем я продолжу внесение дополнительных изменений в свойства элементов управления и нажмите Сохранить.
После некоторого момента времени (и это не предсказуемо), Visual Studio отобразит диалоговое окно с ошибкой.
Дизайнер WinForms отображает модальное диалоговое окно с названием " Microsoft Visual Studio", а двухстрочное сообщение " Значение не может быть нулевым. Имя параметра: контекст" и кнопку OK.
К сожалению, после отклонения этого диалогового окна, нажав кнопку "ОК", Visual Studio теперь испортила код, созданный разработчиком формы. Единственный способ восстановить мой код - из файла резервной копии.
Единственное обходное решение, которое я нашел, - установить Локализованный на false для UserControl в окне Свойства. Это не долгосрочное решение, так как мне нужен этот UserControl для локализации в нашем производственном коде.
Мой проект довольно прост, нет веб-сервисов и т.д.
Я пробовал отладку с использованием другого экземпляра Visual Studio, чтобы узнать, могу ли я поймать какие-либо исключения, но никаких исключений не генерируется. Нет никакого отладочного вывода какой-либо важности.
Кто-нибудь еще видел эту проблему? Поиск предложений.
Дополнительная информация...
Мне удалось успешно подключить второй экземпляр Visual Studio и определить, что действительно было выбрано исключение. (Мне нужно было снять флажок "Отладка только моего кода" и включить сервер символов и т.д.).
По-видимому, когда я нажимаю Сохранить в конструкторе WinForm, System.ArgumentNullException происходит в System.dll, в методе System.ComponentModel.Design.Serialization.ContextStack.Push(контекст объекта). Таким образом, параметр контекст имеет значение null, что является проблемой. Не знаю, почему это происходит.
Вот трассировка стека:
System.dll! System.ComponentModel.Design.Serialization.ContextStack.Push(контекст объекта) + 0x88 байт
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 байт
System.Design.dll! System.ComponentModel.Design.Serialization.ComponentCodeDomSerializer.Serialize(System.ComponentModel.Design.Serialization.IDesignerSerializationManager manager = {System.ComponentModel.Design.Serialization.DesignerSerializationManager}, значение объекта = {ReveilleSystem.UserInterface.BoldLabel }) + 0xf64 байт
System.Design.dll! System.Windows.Forms.Design.ControlCodeDomSerializer.Serialize(System.ComponentModel.Design.Serialization.IDesignerSerializationManager manager = {System.ComponentModel.Design.Serialization.DesignerSerializationManager}, значение объекта = {ReveilleSystem.UserInterface.BoldLabel }) + 0x83 байт
System.Design.dll! System.ComponentModel.Design.Serialization.CodeDomSerializerBase.SerializeToExpression(System.ComponentModel.Design.Serialization.IDesignerSerializationManager manager = {System.ComponentModel.Design.Serialization.DesignerSerializationManager}, значение объекта = {ReveilleSystem.UserInterface.BoldLabel }) + 0x173 байт
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 байт
System.Design.dll! System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformFlush(System.ComponentModel.Design.Serialization.IDesignerSerializationManager manager = {System.ComponentModel.Design.Serialization.DesignerSerializationManager}) + 0x7e байты
System.Design.dll! System.ComponentModel.Design.Serialization.BasicDesignerLoader.Flush() + 0x111 байт
Microsoft.VisualStudio.Design.dll! Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.Flush() + 0xa0 байт
System.Design.dll! System.ComponentModel.Design.DesignSurface.Flush() + 0x21 байт
Microsoft.VisualStudio.Shell.Design.dll! Microsoft.VisualStudio.Shell.Design.DesignerWindowPane.OnFlush() + 0x33 байт
Microsoft.VisualStudio.Shell.Design.dll! Microsoft.VisualStudio.Shell.Design.DesignerWindowPane.Microsoft.VisualStudio.Shell.Interop.IVsBatchUpdate.FlushPendingUpdates(uint reserved) + 0x2a байт
Microsoft.VisualStudio.Editor.Implementation.dll! Microsoft.VisualStudio.Editor.Implementation.VsTextBufferAdapter.Microsoft.VisualStudio.Shell.Interop.IVsBatchUpdate.FlushPendingUpdates(uint dwReserved) + 0x97 байт Microsoft.VisualStudio.Editor.Implementation.dll! Microsoft.VisualStudio.Editor.Implementation.VsTextBufferAdapter.Save(строка pszFilename = "C:\Temp\Reveille_KofaxMFP - Version 2\Editors\Connectivity.Designer.cs", int fRemember = 1, uint nFormatIndex = 0) + 0x2f байт
Переход к управляемому переходному процессу
mensv.dll! DllUnregisterServer() + 0x10c990 байт
[Рамки ниже могут быть неправильными и/или отсутствовать, символы, загруженные для msenv.dll] mensv.dll! DllUnregisterServer() + 0x10cce8 байт
mensv.dll! DllUnregisterServer() + 0x3e1d6 байт
[Управляемый для коренного перехода]
Microsoft.VisualStudio.Editor.Implementation.dll! Microsoft.VisualStudio.Editor.Implementation.VsDocDataAdapter.SaveDocData(Microsoft.VisualStudio.Shell.Interop.VSSAVEFLAGS dwSave, out string pbstrMkDocumentNew, out int pfSaveCanceled) + 0x7e байт Переход к управляемому переходному процессу
csproj.dll! DllGetClassObject() + 0x14e87 байт mensv.dll! DllUnregisterServer() + 0x12cbc9 байт
mensv.dll! DllUnregisterServer() + 0x12c940 байт
mensv.dll! VStudioTerm() + 0x4ab22 байт
mensv.dll! VStudioMain() + 0x1bb97 байт
mensv.dll! VStudioMain() + 0x1b74c байт
mensv.dll! VStudioTerm() + 0x3ba6d байт
mensv.dll! VStudioMain() + 0x1b8e1 байт
[Управляемый для коренного перехода]
Microsoft.VisualStudio.Shell.Design.dll! Microsoft.VisualStudio.Shell.Design.Serialization.DesignerDocDataService.LockedDocData.Save() + 0xbc байты
Microsoft.VisualStudio.Shell.Design.dll! Microsoft.VisualStudio.Shell.Design.Serialization.DesignerDocDataService.Microsoft.VisualStudio.Shell.Interop.IVsRunningDocTableEvents.OnAfterSave(uint docCookie) + 0x124 байт
Переход к управляемому переходному процессу
mensv.dll! DllUnregisterServer() + 0xd6984 байт
mensv.dll! DllUnregisterServer() + 0xd68f0 байт
mnsv.dll! DllUnregisterServer() + 0x12cc40 байт
mensv.dll! DllUnregisterServer() + 0x12c940 байт
mensv.dll! VStudioTerm() + 0x4ab22 байт
mensv.dll! VStudioMain() + 0x1bb97 байт
mensv.dll! VStudioMain() + 0x1b74c байт
mensv.dll! VStudioTerm() + 0x3ba6d байт
mensv.dll! VStudioMain() + 0x1b8e1 байт
mlsv.dll! DllUnregisterServer() + 0x34e5c байт
mensv.dll! DllMain() + 0x5c5 байт
mensv.dll! DllMain() + 0x2609d байт
mensv.dll! DllMain() + 0x265a7 байт
mensv.dll! DllUnregisterServer() + 0x170768 байт
mensv.dll! DllUnregisterServer() + 0x1e56f8 байт
mensv.dll! DllMain() + 0x1ea7f байт
mensv.dll! DllMain() + 0x1e70b байт
mensv.dll! DllUnregisterServer() + 0x170894 байт
mensv.dll! DllUnregisterServer() + 0x378a71 байт
mensv.dll! DllUnregisterServer() + 0x378bb8 байт
mensv.dll! DllUnregisterServer() + 0x378aa1 байт
msenv.dll! 6861124f()
[Управляемый для коренного перехода]
Microsoft.VisualStudio.Shell.10.0.dll! Microsoft.Internal.VisualStudio.PlatformUI.DataSource.Invoke(string verb, object pvaIn, out object pvaOut) + 0x21 байт
Microsoft.VisualStudio.Shell.UI.Internal.dll! Microsoft.VisualStudio.PlatformUI.VsCommand.Execute(параметр объекта) + 0x29 байт PresentationFramework.dll! MS.Internal.Commands.CommandHelpers.CriticalExecuteCommandSource(System.Windows.Input.ICommandSource commandSource, bool userInitiated) + 0xb4 байт
PresentationFramework.dll! System.Windows.Controls.Primitives.ButtonBase.OnClick() + 0x54 байт
PresentationFramework.dll! System.Windows.Controls.Button.OnClick() + 0x4d байт PresentationFramework.dll! System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(System.Windows.Input.MouseButtonEventArgs e) + 0x9e байт
PresentationCore.dll! System.Windows.UIElement.OnMouseLeftButtonUpThunk(отправитель объекта, System.Windows.Input.MouseButtonEventArgs e) + 0x6c байты PresentationCore.dll! System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(System.Delegate genericHandler, object genericTarget) + 0x31 байт
PresentationCore.dll! System.Windows.RoutedEventArgs.InvokeHandler(обработчик System.Delegate, объект) + 0x29 байт
PresentationCore.dll! System.Windows.RoutedEventHandlerInfo.InvokeHandler(объект target, System.Windows.RoutedEventArgs routedEventArgs) + 0x3e байт
PresentationCore.dll! System.Windows.EventRoute.InvokeHandlersImpl(объект source = {Microsoft.VisualStudio.PlatformUI.VsButton}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}, bool reRaised = true) + 0xbe байты
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 байт
PresentationCore.dll! System.Windows.UIElement.OnMouseUpThunk(отправитель объекта, System.Windows.Input.MouseButtonEventArgs e) + 0xc5 байт
PresentationCore.dll! System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(System.Delegate genericHandler, object genericTarget) + 0x31 байт
PresentationCore.dll! System.Windows.RoutedEventArgs.InvokeHandler(обработчик System.Delegate, объект) + 0x29 байт
PresentationCore.dll! System.Windows.RoutedEventHandlerInfo.InvokeHandler(объект target, System.Windows.RoutedEventArgs routedEventArgs) + 0x3e байт
PresentationCore.dll! System.Windows.EventRoute.InvokeHandlersImpl(объект source = {Microsoft.VisualStudio.PlatformUI.VsButton}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}, bool reRaised = false) + 0xbe байты
Система PresentationCore.dll!.Windows.UIElement.RaiseEventImpl(System.Windows.DependencyObject sender = {Microsoft.VisualStudio.PlatformUI.VsButton}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}) + 0x79 байт PresentationCore.dll! System.Windows.UIElement.RaiseTrustedEvent(System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}) + 0x41 байт PresentationCore.dll! System.Windows.UIElement.RaiseEvent(System.Windows.RoutedEventArgs args, bool trusted) + 0x2c байты
PresentationCore.dll! System.Windows.Input.InputManager.ProcessStagingArea() + 0x1ff байт
PresentationCore.dll! System.Windows.Input.InputManager.ProcessInput(вход System.Windows.Input.InputEventArgs) + 0x45 байт PresentationCore.dll! System.Windows.Input.InputProviderSite.ReportInput(System.Windows.Input.InputReport inputReport) + 0x62 байт
PresentationCore.dll! System.Windows.Interop.HwndMouseInputProvider.ReportInput(System.IntPtr hwnd, System.Windows.Input.InputMode mode, int timestamp, System.Windows.Input.RawMouseActions action, int x, int y, int wheel) + 0x2c2 байт 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 байт
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 байт 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 байт
WindowsBase.dll! MS.Win32.HwndSubclass.DispatcherCallbackOperation(объект o) + 0x7d байт
WindowsBase.dll! System.Windows.Threading.ExceptionWrapper.InternalRealCall(обратный вызов System.Delegate, object args, int numArgs) + 0x53 байт Windows.exe. MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(объект source = {System.Windows.Threading.Dispatcher}, метод System.Delegate, object args, int numArgs, System.Delegate catchHandler = null) + 0x42 байт WindowsBase.dll! System.Windows.Threading.Dispatcher.InvokeImpl(System.Windows.Threading.DispatcherPriority priority, System.TimeSpan timeout, System.Delegate, object args, int numArgs) + 0xb4 байт
WindowsBase.dll! MS.Win32.HwndSubclass.SubclassWndProc(System.IntPtr hwnd = 1837128, int msg = 514, System.IntPtr wParam = 0, System.IntPtr lParam = 2293872) + 0x104 байт
user32.dll! gapfnScSendMessage() + 0x1cf
user32.dll! gapfnScSendMessage() + 0x2cf
user32.dll! gapfnScSendMessage() + 0x901 байт
user32.dll! DispatchMessageW() + 0xf байт
mensv.dll! DllGetClassObject() + 0x37521 bytes
mensv.dll! DllGetClassObject() + 0x375aa байт
msenv.dll! DllCanUnloadNow() + 0x190f байт msenv.dll! DllCanUnloadNow() + 0x1840 байт msenv.dll! DllCanUnloadNow() + 0x17a1 байт msenv.dll! DllCanUnloadNow() + 0x176e байт mlsv.dll! DllCanUnloadNow() + 0x16b0 байт mensv.dll! VStudioMain() + 0x78 байт
devenv.exe! 2fcb0637()
devenv.exe! 2fcb0fd4()
devenv.exe! 2fcb20d8()
devenv.exe! 2fcb2148()
devenv.exe! 2fcbea7f()
kernel32.dll! BaseThreadInitThunk() + 0x12 байт
ntdll.dll! RtlInitializeExceptionChain() + 0xef байт
ntdll.dll! RtlInitializeExceptionChain() + 0xc2 байты
[Обновление2]
Я думаю, что нашел причину моей проблемы.
На основе предложений от SLaks я пересмотрел файл X.Designer.cs, связанный с моим UserControl. В X.Designer.cs было указано несколько других элементов управления (флажок, ярлыки и т.д.), Но это фактически не отображалось в пользовательском интерфейсе. Я подозреваю, что, развивая свой UserControl с помощью редактора WinForm, я, вероятно, прошел несколько циклов добавления/удаления дочерних элементов управления, и в какой-то момент некоторые из этих дочерних элементов были потеряны в файле X.Designer.cs. Я вернулся к нелокализованной версии моего UserControl (Localizable = False), затем удалили все дочерние элементы-сироты, затем перекомпилировали, затем откройте UserControl в Designer WinForm, затем установите Localizable обратно в True и сохраните все. Кажется, это работает сейчас. Я обновлю это в будущем, если это не будет решением.