{"record":{"id":"3d86f1e13744a83e","repo":"dotnet/wpf","slug":"document-has-more-than-one-signature-definition-relationship","errorCode":null,"errorMessage":"Document has more than one Signature Definition relationship.","messagePattern":"Document has more than one Signature Definition relationship\\.","errorType":"exception","errorClass":"InvalidDataException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/ReachFramework/Packaging/XpsManager.cs","lineNumber":591,"sourceCode":"        {\n            PackagePart documentPart = _metroPackage.GetPart( documentUri );\n            PackagePart sigDefPart = null;\n\n            if( documentPart == null )\n            {\n              throw new InvalidDataException(SR.ReachPackaging_InvalidDocUri);\n            }\n\n            ContentType SignitureDefType =\n                XpsS0Markup.SignatureDefintionType;\n            PackageRelationship SigDefRel = null;\n\n            foreach (PackageRelationship rel in\n                     documentPart.GetRelationshipsByType(XpsS0Markup.SignatureDefinitionRelationshipName))\n            {\n                if (SigDefRel != null)\n                {\n                    throw new InvalidDataException(SR.ReachPackaging_MoreThanOneSigDefParts);\n                }\n\n                SigDefRel = rel;\n            }\n            if (SigDefRel != null)\n            {\n                sigDefPart = _metroPackage.GetPart(PackUriHelper.ResolvePartUri(SigDefRel.SourceUri, SigDefRel.TargetUri));\n            }\n            return sigDefPart;\n        }\n\n        public\n        PackagePart\n        GetDocumentPropertiesPart()\n        {\n            PackageRelationship propertiesPartRelationship =\n                   GetDocumentPropertiesReationship();\n","sourceCodeStart":573,"sourceCodeEnd":609,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/ReachFramework/Packaging/XpsManager.cs#L573-L609","documentation":"GetSignatureDefinitionPart enforces the XPS rule that a document part may have at most one Signature Definition relationship. While enumerating relationships of type SignatureDefinitionRelationshipName, a second one triggers InvalidDataException SR.ReachPackaging_MoreThanOneSigDefParts — the package is structurally invalid.","triggerScenarios":"Reading a package whose document part carries two or more relationships of type XpsS0Markup.SignatureDefinitionRelationshipName, typically because a tool wrote duplicate signature definition parts.","commonSituations":"Packages produced by non-Microsoft or buggy XPS generators that add a signature definition per signature instead of one per document; round-tripping a package through custom code that appends relationships without checking existing ones.","solutions":["Inspect the package with a ZIP/tool viewer and remove the duplicate Signature Definition relationships/parts.","Fix the generating code to add only one signature definition relationship per document part.","Regenerate or re-save the package with a compliant writer (e.g. re-export through WPF XPS APIs) to normalize relationships.","If authoring signatures, reuse the existing SigDef part instead of creating a new relationship each time."],"exampleFix":"// before\nforeach (var sig in signatures)\n    documentPart.CreateRelationship(sig.Uri, TargetMode.Internal, XpsS0Markup.SignatureDefinitionRelationshipName);\n// after\nbool has = documentPart.GetRelationshipsByType(XpsS0Markup.SignatureDefinitionRelationshipName).Any();\nif (!has)\n    documentPart.CreateRelationship(sig.Uri, TargetMode.Internal, XpsS0Markup.SignatureDefinitionRelationshipName);","handlingStrategy":"validation","validationCode":"int sigDefCount = documentPart.GetRelationshipsByType(XpsS0Markup.SignatureDefinitionRelationshipName).Count();\nif (sigDefCount > 1) throw new InvalidDataException(\"Package contains more than one Signature Definition relationship\");","typeGuard":"bool HasSingleSigDef(PackagePart p) => p.GetRelationshipsByType(XpsS0Markup.SignatureDefinitionRelationshipName).Count() <= 1;","tryCatchPattern":"try { return xpsManager.GetSignatureDefinitionPart(documentUri); }\ncatch (InvalidDataException ex) when (ex.Message.Contains(\"Signature Definition\")) { /* treat package as non-conformant; repair or reject */ }","preventionTips":["Validate incoming packages from external producers before processing.","When adding signature definitions, reuse the existing relationship instead of appending.","Test package round-trips through your generator to ensure relationship counts stay at 1."],"tags":["wpf","xps","signatures","corrupt-package"],"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-21T21:30:21.729Z"}