dotnet/wpf · error · NotSupportedException
SR.NotSupportedOnUnknownMember
Error message
SR.NotSupportedOnUnknownMember
What it means
XamlMemberInvoker.ThrowIfUnknown is a private guard: when the invoker belongs to XamlMember.UnknownInvoker (an unknown/unresolvable member), GetValue and SetValue throw NotSupportedException with SR.NotSupportedOnUnknownMember. Operations are meaningless on a member that could not be resolved.
Solutions
- Verify the member exists before use: `if (member != XamlMember.UnknownMember)` or compare `ReferenceEquals(member.Invoker, XamlMemberInvoker.UnknownInvoker)`.
- Fix the member name / ensure the declaring type's assembly is referenced and loadable in the schema context.
- Catch NotSupportedException and treat the member as absent if probing is intentional.
Example fix
// before
var member = type.GetMember("TargetName"); // typo → UnknownMember
var value = member.Invoker.GetValue(obj); // NotSupportedException
// after
var member = type.GetMember("TargetName");
if (member is null || ReferenceEquals(member.Invoker, XamlMemberInvoker.UnknownInvoker))
return; // member not resolvable
var value = member.Invoker.GetValue(obj); Defensive patterns
Strategy: type-guard
Validate before calling
bool usable = !ReferenceEquals(member, XamlMember.UnknownMember) && !ReferenceEquals(member.Invoker, XamlMemberInvoker.UnknownInvoker);
Type guard
static bool IsKnownMember(XamlMember m) => !ReferenceEquals(m.Invoker, XamlMemberInvoker.UnknownInvoker);
Try / catch
try { v = invoker.GetValue(instance); }
catch (NotSupportedException ex) when (ex.Message.Contains("unknown")) { /* unresolved member: treat as absent */ } Prevention
- Always compare lookup results against XamlMember.UnknownMember
- Ensure referenced assemblies are available to the XamlSchemaContext
- Log unresolved member names at the lookup site instead of failing later
When it happens
Trigger: Calling GetValue/SetValue on XamlMember.UnknownMember's invoker (XamlMemberInvoker.UnknownInvoker), i.e. the member came from XamlType.GetMember for a name that does not exist or a type that failed to resolve.
Common situations: Typos in member names when doing dynamic XAML member access; look-ahead code probing optional members on types from assemblies that failed to load; schema lookups in partial-trust or trimmed deployments where the type is missing.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- SR.CantGetWriteonlyProperty
- SR.CantSetReadonlyProperty
- SR.NotSupportedOnDirective
- SR.OnlySupportedOnCollections
- CollectionIsFixedSize
AI-assisted analysis of dotnet/wpf@81131a70a4 (2026-09-14).
Data as JSON: /api/errors/3b21476e83dba2c5.
Report an issue: GitHub.
Appendix: source
Thrown at src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/Schema/XamlMemberInvoker.cs:159
result = (bool)shouldSerializeMethod.Invoke(instance, null);
}
return result ? ShouldSerializeResult.True : ShouldSerializeResult.False;
}
return ShouldSerializeResult.Default;
}
private bool IsUnknown
{
get { return _member is null || _member.UnderlyingMember is null; }
}
private void ThrowIfUnknown()
{
if (IsUnknown)
{
throw new NotSupportedException(SR.NotSupportedOnUnknownMember);
}
}
private class DirectiveMemberInvoker : XamlMemberInvoker
{
public override object GetValue(object instance)
{
throw new NotSupportedException(SR.NotSupportedOnDirective);
}
public override void SetValue(object instance, object value)
{
throw new NotSupportedException(SR.NotSupportedOnDirective);
}
}
}
public enum ShouldSerializeResultView on GitHub (pinned to 81131a70a4)