{"record":{"id":"7d989f68f8d9f17b","repo":"dotnet/wpf","slug":"container-already-has-starting-part","errorCode":null,"errorMessage":"Container already has Starting Part.","messagePattern":"Container already has Starting Part\\.","errorType":"exception","errorClass":"XpsPackagingException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/ReachFramework/Packaging/XpsManager.cs","lineNumber":201,"sourceCode":"        /// <value>A Metro Part representing the root.</value>\n        public PackagePart StartingPart\n        {\n            get\n            {\n                PackagePart part = null;\n                if (null != _metroPackage)\n                {\n                    part = GetXpsDocumentStartingPart(_metroPackage);\n                }\n\n                return part;\n            }\n            set\n            {\n                ObjectDisposedException.ThrowIf(_metroPackage is null, typeof(XpsManager));\n                if ( !Streaming && null != GetXpsDocumentStartingPart(_metroPackage))\n                {\n                    throw new XpsPackagingException(SR.ReachPackaging_AlreadyHasStartingPart);\n                }\n\n                SetXpsDocumentStartingPart(_metroPackage, value);\n            }\n        }\n\n        /// <summary>\n        /// Gets the XpsDocument that owns the XpsManager\n        /// </summary>\n        /// <value>A boolean flag.</value>\n        public\n        XpsDocument\n        XpsDocument\n        {\n            set\n            {\n                _xpsDocument = value;\n            }","sourceCodeStart":183,"sourceCodeEnd":219,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/ReachFramework/Packaging/XpsManager.cs#L183-L219","documentation":"The XpsManager.StartingPart setter throws XpsPackagingException(SR.ReachPackaging_AlreadyHasStartingPart) when the package is non-streaming and a starting part (FixedDocumentSequence root) has already been set. A fixed-format package may define only one starting part.","triggerScenarios":"Setting XpsManager.StartingPart (or creating a second document root) on a non-streaming package that already has a FixedDocumentSequence/starting part registered via GetXpsDocumentStartingPart.","commonSituations":"Appending a new FixedDocumentSequence to an existing XPS file opened in ReadWrite; re-running initialization code twice on the same package; mixing Write/ReadWrite flows on one package.","solutions":["Check whether a starting part already exists and reuse it instead of setting a new one.","Remove the existing starting part first if you truly intend to replace the document root.","For streaming scenarios enable streaming mode, which bypasses this restriction, or create a fresh package."],"exampleFix":"// before\nmanager.StartingPart = newSeq; // may throw if one exists\n// after\nif (manager.StartingPart == null)\n    manager.StartingPart = newSeq;\nelse\n    // reuse existing root or replace via documented remove/rewrite path","handlingStrategy":"validation","validationCode":"if (!streaming && xpsManager.StartingPart != null)\n    throw new InvalidOperationException(\"Package already has a starting part\");","typeGuard":null,"tryCatchPattern":"try { manager.StartingPart = seq; }\ncatch (XpsPackagingException ex) when (ex.Message.Contains(\"Starting Part\")) { /* reuse existing starting part */ }","preventionTips":["Set StartingPart only once during package initialization; guard idempotently.","Never append a second FixedDocumentSequence root to an existing non-streaming package."],"tags":["wpf","xps","starting-part","duplicate"],"backgroundTag":"file-already-exists","analyzedSha":"81131a70a4c573cd62748a5c36908fc4d662daa9","analyzedAt":"2026-09-14T10:12:48.479Z","contentChangedAt":"2026-09-14T10:12:48.479Z","schemaVersion":2},"datasetVersion":"2026-09-21T21:30:21.729Z"}