diff --git a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs index eb91c80553..14109b93fd 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/Layouts/AvalonDockLayout.cs @@ -320,8 +320,14 @@ namespace ICSharpCode.SharpDevelop.Gui Directory.CreateDirectory(configPath); string fileName = Path.Combine(configPath, current.FileName); LoggingService.Info("Saving layout file: " + fileName); + // Save docking layout into memory stream first, then write the contents to file. + // This prevents corruption when there is an exception saving the layout. + var memoryStream = new MemoryStream(); + dockingManager.SaveLayout(memoryStream); + memoryStream.Position = 0; try { - dockingManager.SaveLayout(fileName); + using (FileStream stream = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite)) + memoryStream.CopyTo(stream); } catch (IOException ex) { // ignore IO errors (maybe switching layout in two SharpDevelop instances at once?) LoggingService.Warn(ex);