{"record":{"id":"01c9060319a84a00","repo":"dotnet/wpf","slug":"count-must-be-1-when-commitpolicies-is-set-to","errorCode":null,"errorMessage":"Count must be 1 when CommitPolicies is set to CommitEntireSequence.","messagePattern":"Count must be 1 when CommitPolicies is set to CommitEntireSequence\\.","errorType":"exception","errorClass":"ArgumentOutOfRangeException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/ReachFramework/Serialization/XpsFontSubsetter.cs","lineNumber":343,"sourceCode":"                case FontEmbeddingRight.PreviewAndPrintButNoSubsetting:\n                case FontEmbeddingRight.PreviewAndPrint:\n                    isRestrictedFont = true;\n                    break;\n           }\n           return isRestrictedFont;            \n        }\n        \n        /// <summary> \n        /// Determines on what signal subsets will be commited\n        ///</summary> \n        public\n        void\n        SetSubsetCommitPolicy( FontSubsetterCommitPolicies policy )\n        {\n           if( policy == FontSubsetterCommitPolicies.CommitEntireSequence &&\n                _commitCountPolicy != 1 )\n            {\n                throw new ArgumentOutOfRangeException(SR.ReachPackaging_SequenceCntMustBe1);\n            }\n          _commitPolicy = policy;\n        }\n\n        /// <summary> \n        /// Determines the number of signals subsets will be commited on\n        ///</summary> \n        public\n        void\n        SetSubsetCommitCountPolicy( int commitCount )\n        {\n            if( _commitPolicy == FontSubsetterCommitPolicies.CommitEntireSequence &&\n                commitCount != 1 )\n            {\n                throw new ArgumentOutOfRangeException(SR.ReachPackaging_SequenceCntMustBe1);\n            }\n            else\n            if( commitCount < 1 )","sourceCodeStart":325,"sourceCodeEnd":361,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/ReachFramework/Serialization/XpsFontSubsetter.cs#L325-L361","documentation":"XpsFontSubsetter enforces the invariant that CommitEntireSequence commit policy is only valid when the commit count policy is exactly 1 (fonts commit once for the whole document sequence). SetSubsetCommitPolicy throws ArgumentOutOfRangeException (message: \"Count must be 1 when CommitPolicies is set to CommitEntireSequence\") when CommitEntireSequence is requested while _commitCountPolicy != 1. The policy setter is invoked from SetFontSubsettingPolicy during serialization-manager configuration.","triggerScenarios":"Calling SetSubsetCommitPolicy(FontSubsetterCommitPolicies.CommitEntireSequence) — directly or via SetFontSubsettingPolicy — on an XpsFontSubsetter whose commit count policy was previously set to a value other than 1 via SetSubsetCommitCountPolicy.","commonSituations":"Configuring per-page or per-document font commit counts and then switching to whole-sequence commits; conflicting XPS packaging settings where PackagingPolicy font subsetting count doesn't match the commit policy; programmatic reuse of a configured subsetter with a different policy.","solutions":["Call SetSubsetCommitCountPolicy(1) before setting CommitEntireSequence, or use CommitPerDocument/CommitPerPage instead.","Set the commit policy before the count policy (SetSubsetCommitPolicy first, then a compatible count).","Check the current count policy and adjust it before switching to CommitEntireSequence."],"exampleFix":"// before\nsubsetter.SetSubsetCommitCountPolicy(3);\nsubsetter.SetSubsetCommitPolicy(FontSubsetterCommitPolicies.CommitEntireSequence); // throws\n\n// after\nsubsetter.SetSubsetCommitCountPolicy(1);\nsubsetter.SetSubsetCommitPolicy(FontSubsetterCommitPolicies.CommitEntireSequence);","handlingStrategy":"validation","validationCode":"if (policy == FontSubsetterCommitPolicies.CommitEntireSequence && commitCountPolicy != 1)\n{\n    subsetter.SetSubsetCommitCountPolicy(1); // fix count before switching policy\n}\nsubsetter.SetSubsetCommitPolicy(policy);","typeGuard":null,"tryCatchPattern":"try\n{\n    subsetter.SetSubsetCommitPolicy(FontSubsetterCommitPolicies.CommitEntireSequence);\n}\ncatch (ArgumentOutOfRangeException)\n{\n    subsetter.SetSubsetCommitCountPolicy(1);\n    subsetter.SetSubsetCommitPolicy(FontSubsetterCommitPolicies.CommitEntireSequence);\n}","preventionTips":["Keep commit count policy at 1 whenever the commit policy is CommitEntireSequence.","Set the commit policy before the count policy to avoid transient invalid states.","Centralize subsetter configuration in one place so policy/count never diverge."],"tags":["wpf","xps","fonts","configuration","argument-out-of-range"],"backgroundTag":"conflicting-config-options","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"}