dotnet/wpf · error · ArgumentOutOfRangeException

Count must be 1 when CommitPolicies is set to…

Error message

Count must be 1 when CommitPolicies is set to CommitEntireSequence.

What it means

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.

Solutions

  1. Call SetSubsetCommitCountPolicy(1) before setting CommitEntireSequence, or use CommitPerDocument/CommitPerPage instead.
  2. Set the commit policy before the count policy (SetSubsetCommitPolicy first, then a compatible count).
  3. Check the current count policy and adjust it before switching to CommitEntireSequence.

Example fix

// before
subsetter.SetSubsetCommitCountPolicy(3);
subsetter.SetSubsetCommitPolicy(FontSubsetterCommitPolicies.CommitEntireSequence); // throws

// after
subsetter.SetSubsetCommitCountPolicy(1);
subsetter.SetSubsetCommitPolicy(FontSubsetterCommitPolicies.CommitEntireSequence);
Defensive patterns

Strategy: validation

Validate before calling

if (policy == FontSubsetterCommitPolicies.CommitEntireSequence && commitCountPolicy != 1)
{
    subsetter.SetSubsetCommitCountPolicy(1); // fix count before switching policy
}
subsetter.SetSubsetCommitPolicy(policy);

Try / catch

try
{
    subsetter.SetSubsetCommitPolicy(FontSubsetterCommitPolicies.CommitEntireSequence);
}
catch (ArgumentOutOfRangeException)
{
    subsetter.SetSubsetCommitCountPolicy(1);
    subsetter.SetSubsetCommitPolicy(FontSubsetterCommitPolicies.CommitEntireSequence);
}

Prevention

When it happens

Trigger: 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.

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

Understand the failure class

Background: Conflicting config options: "cannot be used together" — configuration validation errors across open-source libraries — this error's family across 162 libraries.

Related errors


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

Appendix: source

Thrown at src/Microsoft.DotNet.Wpf/src/ReachFramework/Serialization/XpsFontSubsetter.cs:343

                case FontEmbeddingRight.PreviewAndPrintButNoSubsetting:
                case FontEmbeddingRight.PreviewAndPrint:
                    isRestrictedFont = true;
                    break;
           }
           return isRestrictedFont;            
        }
        
        /// <summary> 
        /// Determines on what signal subsets will be commited
        ///</summary> 
        public
        void
        SetSubsetCommitPolicy( FontSubsetterCommitPolicies policy )
        {
           if( policy == FontSubsetterCommitPolicies.CommitEntireSequence &&
                _commitCountPolicy != 1 )
            {
                throw new ArgumentOutOfRangeException(SR.ReachPackaging_SequenceCntMustBe1);
            }
          _commitPolicy = policy;
        }

        /// <summary> 
        /// Determines the number of signals subsets will be commited on
        ///</summary> 
        public
        void
        SetSubsetCommitCountPolicy( int commitCount )
        {
            if( _commitPolicy == FontSubsetterCommitPolicies.CommitEntireSequence &&
                commitCount != 1 )
            {
                throw new ArgumentOutOfRangeException(SR.ReachPackaging_SequenceCntMustBe1);
            }
            else
            if( commitCount < 1 )

View on GitHub (pinned to 81131a70a4)