dotnet/wpf · error · XpsPackagingException

Container already has Starting Part.

Error message

Container already has Starting Part.

What it means

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.

Solutions

  1. Check whether a starting part already exists and reuse it instead of setting a new one.
  2. Remove the existing starting part first if you truly intend to replace the document root.
  3. For streaming scenarios enable streaming mode, which bypasses this restriction, or create a fresh package.

Example fix

// before
manager.StartingPart = newSeq; // may throw if one exists
// after
if (manager.StartingPart == null)
    manager.StartingPart = newSeq;
else
    // reuse existing root or replace via documented remove/rewrite path
Defensive patterns

Strategy: validation

Validate before calling

if (!streaming && xpsManager.StartingPart != null)
    throw new InvalidOperationException("Package already has a starting part");

Try / catch

try { manager.StartingPart = seq; }
catch (XpsPackagingException ex) when (ex.Message.Contains("Starting Part")) { /* reuse existing starting part */ }

Prevention

When it happens

Trigger: Setting XpsManager.StartingPart (or creating a second document root) on a non-streaming package that already has a FixedDocumentSequence/starting part registered via GetXpsDocumentStartingPart.

Common situations: 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.

Understand the failure class

Background: "already exists" / EEXIST / FileAlreadyExistsException: what the 'file already exists' error means and how to fix it — this error's family across 37 libraries.

Related errors


AI-assisted analysis of dotnet/wpf@81131a70a4 (2026-09-14). Data as JSON: /api/errors/7d989f68f8d9f17b. Report an issue: GitHub.

Appendix: source

Thrown at src/Microsoft.DotNet.Wpf/src/ReachFramework/Packaging/XpsManager.cs:201

        /// <value>A Metro Part representing the root.</value>
        public PackagePart StartingPart
        {
            get
            {
                PackagePart part = null;
                if (null != _metroPackage)
                {
                    part = GetXpsDocumentStartingPart(_metroPackage);
                }

                return part;
            }
            set
            {
                ObjectDisposedException.ThrowIf(_metroPackage is null, typeof(XpsManager));
                if ( !Streaming && null != GetXpsDocumentStartingPart(_metroPackage))
                {
                    throw new XpsPackagingException(SR.ReachPackaging_AlreadyHasStartingPart);
                }

                SetXpsDocumentStartingPart(_metroPackage, value);
            }
        }

        /// <summary>
        /// Gets the XpsDocument that owns the XpsManager
        /// </summary>
        /// <value>A boolean flag.</value>
        public
        XpsDocument
        XpsDocument
        {
            set
            {
                _xpsDocument = value;
            }

View on GitHub (pinned to 81131a70a4)