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
- 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.
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
- 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.
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
- CommitCountPolicy must be greater than zero.
- No font service is registered with resource policy.
- Serialization of this type of object is not supported.
- SR.FaceIndexValidOnlyForTTC
- SR.Format(SR.PropertyMustBeGreaterThanZero, propertyName)
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)