dotnet/wpf · error · ArgumentException
SR.TransformStackValid
Error message
SR.TransformStackValid
What it means
DataSpaceManager.DefineDataSpace throws ArgumentException with message SR.TransformStackValid when the transformStack argument is null or empty. A data space must be defined with at least one transform in its stack.
Solutions
- Pass at least one valid, previously defined transform label in transformStack.
- Guard the call: if (stack == null || stack.Length == 0) define the required transform first via DefineTransform.
- Fix configuration so the required transform names are present before data-space definition.
Example fix
// before
manager.DefineDataSpace(new string[0], "MyDataSpace"); // throws
// after
manager.DefineDataSpace(new[] { "Transform.Compression" }, "MyDataSpace"); Defensive patterns
Strategy: validation
Validate before calling
if (transformStack == null || transformStack.Length == 0) throw new ArgumentException("A data space requires at least one transform."); Type guard
bool HasTransforms(string[] s) => s != null && s.Length > 0;
Try / catch
try { manager.DefineDataSpace(stack, label); } catch (ArgumentException) { /* supply a valid transform stack */ } Prevention
- Ensure transforms are defined before defining data spaces
- Validate config-driven transform lists for emptiness
When it happens
Trigger: Calling DefineDataSpace(null, label) or DefineDataSpace(new string[0], label).
Common situations: Constructing a transform stack programmatically where the list ends up empty because no transforms were configured (e.g. no encryption/integrity transform names loaded from settings).
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- SR.DataSpaceManagerDisposed
- The given data space label name is already in use.
- Can only countersign parts with Digital Signature…
- Duplicates not allowed - signature part already exists.
- Must specify an item to sign.
AI-assisted analysis of dotnet/wpf@81131a70a4 (2026-09-14).
Data as JSON: /api/errors/77f7e2b15dcf88bc.
Report an issue: GitHub.
Appendix: source
Thrown at src/Microsoft.DotNet.Wpf/src/WindowsBase/System/IO/Packaging/CompoundFile/DataSpaceManager.cs:578
throw new ObjectDisposedException(null, SR.DataSpaceManagerDisposed);
}
}
/// <summary>
/// Define a data space with the given stack of transform objects and
/// labeled with the given name. The transform stack is interpreted in
/// bottom-up order. (Clear-text transform is last.)
/// </summary>
/// <param name="transformStack">Transform stack</param>
/// <param name="newDataSpaceLabel">New data space label</param>
internal void DefineDataSpace( string[] transformStack, string newDataSpaceLabel )
{
CheckDisposedStatus();
// Data space must have at least one transform
if( null == transformStack ||
0 == transformStack.Length )
throw new ArgumentException(
SR.TransformStackValid);
// Given label must be a non-empty string
CU.CheckStringAgainstNullAndEmpty(newDataSpaceLabel, "newDataSpaceLabel");
// Given label must not be a reserved string
CU.CheckStringAgainstReservedName(newDataSpaceLabel, "newDataSpaceLabel");
// Given label must not already be in use
if( DataSpaceIsDefined( newDataSpaceLabel ) )
throw new ArgumentException(
SR.DataSpaceLabelInUse);
// Given transform array must include labels that have already been defined
foreach( string transformLabel in transformStack )
{
CU.CheckStringAgainstNullAndEmpty( transformLabel, "Transform label" );
View on GitHub (pinned to 81131a70a4)