У меня есть приложение Windows # Forms ac #, использующее .NET 3.5.
Моя машинная среда выглядит следующим образом:
- Visual Studio 2010 Premium, SP1
- Windows 7 Professional, SP1
- 32-разрядный процессор
У меня есть пользовательский элемент управления, * UserControl , который содержит несколько других элементов UserControls.
Я вызываю основной UserControl в Windows Forms Designer в Visual Studio, затем начинаю щелкать различные встроенные элементы UserControls и произвольно менять некоторые свойства, например Text .Затем я нажимаю кнопку панели инструментов Сохранить .Затем я продолжаю вносить дополнительные изменения в свойства элементов управления и нажимаю Сохранить .
Через некоторое время (и это не предсказуемо) Visual Studio отобразит диалоговое окно с сообщением об ошибке..
Дизайнер WinForms отображает модальное диалоговое окно с заголовком « Microsoft Visual Studio » и двухстрочным сообщением « Значение не может быть пустым. Имя параметра: контекст "и кнопка ОК.
К сожалению, после закрытия этого диалогового окна нажатием кнопки ОК Visual Studio теперь повредила сгенерированный дизайнером код моей формы.Единственный способ восстановить мой код - из файла резервной копии.
Единственный найденный мной обходной путь - установить Localizable в false для UserControl в Свойства Окно.Это не долгосрочный обходной путь, поскольку мне нужно, чтобы этот UserControl был локализуем в нашем производственном коде.
Мой проект довольно прост, без веб-служб и т. Д.
Я пытался отладить с помощьюдругой экземпляр Visual Studio, чтобы посмотреть, смогу ли я перехватить какие-либо исключения, но исключения не генерируются.Нет отладочных выходов какой-либо важности.
Кто-нибудь еще видел эту проблему?Поиск предложений.
Дополнительная информация ...
Мне удалось успешно подключить второй экземпляр Visual Studio и определить, что действительно было выдано исключение.(Мне пришлось снять флажок с параметром отладки «Просто мой код» и включить сервер символов и т. Д.).
Видимо, когда я нажимаю Сохранить в конструкторе WinForm, a System.ArgumentNullException происходит в System.dll , в методе System.ComponentModel.Design.Serialization.ContextStack.Push (контекст объекта) .Итак, параметр context имеет значение 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.erMesl.DesignMant.Serialization.Derialization.Serialization.Derialization.DerializeЭлемент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.DesignerInel. }) + 0x173 байта
System.Design.dll! System.ComponentModel.Design.Serialization. .EditorBase}, System.Collections.ICollection members = {System.ComponentModel.ComponentCollection}) + 0x195 байт
System.Design.dll! System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.
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 резервируется) + 0x2a байт
Microsoft.VisualStudio.Editor.Implementation.dll! Microsoft.VisualStudio.Editor.Implementation.VsTextBufferAdapter.Microsoft.VisualStudio.Shell.Interop.IVsBatchUpdate.FlushPendingUpdates (uint dwReserved 0) +
Microsoft.VisualStudio.Editor.Implement.dll! uint nFormatIndex = 0) + 0x2f байт
[Родной для управляемого перехода]
msenv.dll! DllUnregisterServer () + 0x10c990 байт
[Кадры ниже могут быть неправильными и / или отсутствующими, символы не загружены для msenv.dll]
msenv.dll! DllUnregisterServer () + 0x10cce8 байт
msenv.dll! DllUnregisterServer () + 0x3e1d6 байт
[Управляемый к нативному переходу]
Майкрософт.VisualStudio.Editor.Implementation.dll!
[Родной для управляемого перехода]
csproj.dll! DllGetClassObject () + 0x14e87 байт
msenv.dll! DllUnregisterServer () + 0x12cbc9 байт
msenv.dll! DllUnregisterServer () + 0x12c940 байт
msenv.dll! VStudioTerm () + 0x4ab22 байт
msenv.dll! VStudioMain () + 0x1bb97 байт
msenv.dll! VStudioMain () + 0x1b74c байт
msenv.dll! VStudioTerm () + 0x3ba6d байт
msenv.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) + 0x98 by 0
[Родной для управляемого перехода]
msenv.dll! DllUnregisterServer () + 0xd6984 байта
msenv.dll! DllUnregisterServer () + 0xd68f0 байт
msenv.dll! DllUnregisterServer () + 0x12cc40 байт
msenv.dll! DllUnregisterServer () + 0x12c940 байт
msenv.dll! VStudioTerm () + 0x4ab22 байт
msenv.dll! VStudioMain () + 0x1bb97 байт
msenv.dll! VStudioMain () + 0x1b74c байт
msenv.dll! VStudioTerm () + 0x3ba6d байт
msenv.dll! VStudioMain () + 0x1b8e1 байт
msenv.dll! DllUnregisterServer () + 0x34e5c байт
msenv.dll! DllMain () + 0x5c5 байт
msenv.dll! DllMain () + 0x2609d байт
msenv.dll! DllMain () + 0x265a7 байт
msenv.dll! DllUnregisterServer () + 0x170768 байт
msenv.dll! DllUnregisterServer () + 0x1e56f8 байт
msenv.dll! DllMain () + 0x1ea7f байт
msenv.dll! DllMain () + 0x1e70b байт
msenv.dll! DllUnregisterServer () + 0x170894 байта
msenv.dll! DllUnregisterServer () + 0x378a71 байт
msenv.dll! DllUnregisterServer () + 0x378bb8 байт
msenv.dll! DllUnregisterServer () + 0x378aa1 байт
msenv.dll! 6861124f ()
[Управляемый к нативному переходу]
Microsoft.VisualStudio.Shell.10.0.dll! Microsoft.Internal.VisualStudio.PlatformUI.DataSource.Invoke (строковый глагол, объект pvaIn, выходной объект 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, объект genericTarget) + 0x31 байт
PresentationCore.dll! System.Windows.RoutedEventArgs.InvokeHandler (обработчик System.Delegate, цель объекта) + 0x29 байт
PresentationCore.dll! System.Windows.RoutedEventHandlerInfo.InvokeHandler (цель объекта, System.Windows.RoutedEventArgs routedEventArgs) + 0x3e байт
PresentationCore.dll! System.Windows.EventRoute.InvokeHandlersImpl (источник объекта = {Microsoft.VisualStudio.PlatformUI.VsButton}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}, bool reRaised true) 0
PresentationCore.dll! System.Windows.UIElement.ReRaiseEventAs (System.Windows.DependencyObject sender = {Microsoft.VisualStudio.PlatformUI.VsButton}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventWgs}., System. 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, объект genericTarget) + 0x31 байт
PresentationCore.dll! System.Windows.RoutedEventArgs.InvokeHandler (обработчик System.Delegate, цель объекта) + 0x29 байт
PresentationCore.dll! System.Windows.RoutedEventHandlerInfo.InvokeHandler (цель объекта, System.Windows.RoutedEventArgs routedEventArgs) + 0x3e байт
PresentationCore.dll! System.Windows.EventRoute.InvokeHandlersImpl (источник объекта = {Microsoft.VisualStudio.PlatformUI.VsButton}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}, bool reRaised = 0) false
PresentationCore.dll! System.Windows.UIElement.RaiseEventImpl (System.Windows.DependencyObject sender = {Microsoft.VisualStudio.PlatformUI.VsButton}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEvent0x79 байт 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 доверено) + 0x2c байт
PresentationCore.dll! System.Windows.Input.InputManager.ProcessStagingArea () + 0x1ff байт
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 байта
PresentationCore.dll! System.Windows.Interop.HwndMouseInputProvider.ReportInput (System.IntPtr hwnd,.Windows.Input.InputMode mode, int timestamp, действия System.Windows.Input.RawMouseActions, 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.Wrac.nd(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 (системаОбратный вызов .Delegate, аргументы объекта, int numArgs) + 0x53 байта WindowsBase.dll! MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen (source source = {System.Windows.Threading.Dispatcher}, метод System.Delegate, аргументы объекта, int numArgs, System.Delegate catchHandler = null) + 0x42 байта WindowsBase.dll! System.Windows.Threading.Dispatcher.InvokeImpl (приоритет System.Windows.Threading.DispatcherPriority, время ожидания System.TimeSpan, метод System.Delegate, аргументы объекта, int numArgs)+ 0xb4 байта
WindowsBase.dll! MS.Win32.HwndSubclass.SubclassWndProc (System.IntPtr hwnd = 1837128, int msg = 514, System.IntPtr wParam = 0, System.IntPtr lParam = 229384) * 11x10 *1110* 1110 *1110* 1110 *1110* 1110 *1110* 1110 *1110* 1110 *1110* 1110 *1110* 1110 *1110* 1110 *1110* 1110 *1110* 1110 *1110* 1110 *1110* 1110 *1110* 1110 * 1110user32.dll! gapfnScSendMessage () + 0x1cf bytes
user32.dll! gapfnScSendMessage () + 0x2cf bytes
user32.dll! gapfnScSendMessage () + 0x901 байт
user32.dll! DispatchMessageW () + 0xf байт
msenv.dll! DllGetClassObject () + 0x37521 байт
msenv.dll! DllGetClassObject (DllGetClassObject ()+ 0x375aa байт
msenv.dll! DllCanUnloadNow () + 0x190f байт msenv.dll! DllCanUnloadNow () + 0x1840 байт msenv.dll! DllCanUnloadNow () + 0x17a1 байт msenv.dll!DllCanUnloadNow () + 0x16b0 байт msenv.dll! VStudioMain () + 0x78 байт
devenv.exe! 2fcb0637 ()
devenv.exe! 2fcb0fd4 ()
devenv.exe! 2fc2020d8 ()
.exe! 2fcb2148 ()
devenv.exe! 2fcbea7f ()
kernel32.dll! BaseThreadInitThunk () + 0x12 байт
ntdll.dll! RtlInitializeExceptionChain () + 0xef байт
ntdll.dll! RtlInitializeExceptionChain () + 0xc2 байта
[Update2]
Мне кажется, я нашел причину своей проблемы.
Основываясь на предложениях SLaks, я пересмотрел файл X.Designer.cs , связанный с моим UserControl.В X.Designer.cs было объявлено несколько других элементов управления (флажок, метки и т. Д.), Но на самом деле они не отображались в пользовательском интерфейсе.Я подозреваю, что когда я разрабатывал свой UserControl с помощью редактора WinForm, я, вероятно, прошел несколько циклов добавления / удаления дочерних элементов управления, и в какой-то момент некоторые из этих дочерних элементов управления были потеряны в файле X.Designer.cs.Я вернулся к нелокализованной версии моего UserControl ( Localizable = False ), затем удалил все осиротевшие дочерние элементы управления, затем перекомпилировал, затем открыл UserControl в WinForm Designer, затем вернул Localizable обратно в Trueи все сохранил.Кажется, сейчас это работает.Я обновлю это в будущем, если это не будет решением.