{"record":{"id":"49889b1bf57aabec","repo":"dotnet/wpf","slug":"signature-was-deleted","errorCode":null,"errorMessage":"Signature was deleted.","messagePattern":"Signature was deleted\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/WindowsBase/System/IO/Packaging/PackageDigitalSignature.cs","lineNumber":414,"sourceCode":"            _certificatePart = certificatePart;\n        }\n\n        #endregion\n\n        #region Private Methods\n\n        //------------------------------------------------------\n        //\n        //  Private Methods\n        //\n        //------------------------------------------------------\n        /// <summary>\n        /// ThrowIfInvalidated - check on each access\n        /// </summary>\n        private void ThrowIfInvalidated()\n        {\n            if (_invalid)\n                throw new InvalidOperationException(SR.SignatureDeleted);\n        }\n\n        #endregion Private Methods\n\n        //------------------------------------------------------\n        //\n        //  Private Fields\n        //\n        //------------------------------------------------------\n        private PackageDigitalSignatureManager                     _manager;\n        private XmlDigitalSignatureProcessor                       _processor;\n        private CertificatePart                                    _certificatePart;\n        private ReadOnlyCollection<Uri>                            _signedParts;\n        private ReadOnlyCollection<PackageRelationshipSelector>    _signedRelationshipSelectors;\n        private bool                                               _alreadyLookedForCertPart;\n        private bool                                               _invalid;   // have we been invalidated?\n    }\n}","sourceCodeStart":396,"sourceCodeEnd":432,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/WindowsBase/System/IO/Packaging/PackageDigitalSignature.cs#L396-L432","documentation":"Once a PackageDigitalSignature has been removed (invalidated), nearly all of its properties (SignedParts, SignedRelationshipSelectors, SignaturePart, Signer, SigningTime, TimeFormat) call ThrowIfInvalidated and throw InvalidOperationException reporting the signature was deleted. The object remains referenced but is no longer usable.","triggerScenarios":"Holding a PackageDigitalSignature reference and calling PackageDigitalSignatureManager.RemoveSignature (which marks it invalid), then reading any of its properties; enumerating cached signatures after removal.","commonSituations":"Iterating manager.Signatures, removing signatures inside the loop, then reading properties of already-removed signatures; keeping signature objects in collections across RemoveSignature calls.","solutions":["Read all needed properties (Signer, SigningTime, etc.) before calling RemoveSignature","Stop using signature objects once removed; re-fetch manager.Signatures for current valid signatures","Guard property access with the signature's invalid state or a try/catch on InvalidOperationException"],"exampleFix":"// before\nforeach (var sig in manager.Signatures.ToList())\n{\n    manager.RemoveSignature(sig);\n    Console.WriteLine(sig.SigningTime); // InvalidOperationException\n}\n// after\nforeach (var sig in manager.Signatures.ToList())\n{\n    Console.WriteLine(sig.SigningTime); // read first\n    manager.RemoveSignature(sig);\n}","handlingStrategy":"validation","validationCode":"// read needed data before RemoveSignature\nvar time = sig.SigningTime;\nmanager.RemoveSignature(sig);\n// after removal, do not touch sig properties","typeGuard":null,"tryCatchPattern":"try { var t = sig.SigningTime; }\ncatch (InvalidOperationException) { /* signature was deleted: refetch from manager.Signatures */ }","preventionTips":["Read signature properties before calling RemoveSignature","Do not keep PackageDigitalSignature references across removal operations","Re-enumerate manager.Signatures after any removal"],"tags":["wpf","packaging","digital-signature","invalid-state"],"backgroundTag":"invalid-state-transition","analyzedSha":"81131a70a4c573cd62748a5c36908fc4d662daa9","analyzedAt":"2026-09-14T10:12:48.479Z","contentChangedAt":"2026-09-14T10:12:48.479Z","schemaVersion":2},"datasetVersion":"2026-09-22T01:17:13.364Z"}