dotnet/wpf · error · InvalidOperationException

ReachPackaging_DocumentWasClosed

Error message

ReachPackaging_DocumentWasClosed

What it means

RemoveSignature throws this InvalidOperationException when CurrentXpsManager is null, meaning the XpsDocument has already been closed (or was never fully opened); signature removal requires an open package. Callers must perform signature operations while the document is open and dispose afterwards.

Solutions

  1. Perform all signature operations before closing/disposing the XpsDocument
  2. Re-open the package with a new XpsDocument to remove signatures
  3. Check CurrentXpsManager/IsDisposed state before calling RemoveSignature
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at src/Microsoft.DotNet.Wpf/src/ReachFramework/Packaging/XpsDocument.cs:481 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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

Appendix: source

Thrown at src/Microsoft.DotNet.Wpf/src/ReachFramework/Packaging/XpsDocument.cs:481

        void
        RemoveSignature(
            XpsDigitalSignature signature
            )
        {
            CheckDisposed();

            ArgumentNullException.ThrowIfNull(signature);
            if (null == signature.PackageSignature)
            {
                throw new NullReferenceException("signature.PackageSignature");
            }
            if (null == signature.PackageSignature.SignaturePart)
            {
                throw new NullReferenceException("signature.PackageSignature.SignaturePart");
            }
            if( CurrentXpsManager == null )
            {
                throw new InvalidOperationException(SR.ReachPackaging_DocumentWasClosed);
            }
            PackageDigitalSignatureManager packageSignatures = new PackageDigitalSignatureManager(CurrentXpsManager.MetroPackage);
            packageSignatures.RemoveSignature(signature.PackageSignature.SignaturePart.Uri );
            _reachSignatures = null;
            _reachSignatureList = null;
            EnsureSignatures();
}

        /// <summary>
        /// This method adds a thumbnail to the current Xps package.
        ///
        /// There can only be one thumbnail attached to the pakcage.
        ///  Calling this method when there
        /// is already a starting part causes InvalidOperationException to be
        /// thrown.
        /// </summary>
        /// <returns>Returns a XpsThumbnail instance.</returns>
        public

View on GitHub (pinned to 81131a70a4)