{"record":{"id":"3a3b74d6d6a018ba","repo":"dotnet/wpf","slug":"sr-gettargettypeonnonattachablemember","errorCode":null,"errorMessage":"SR.GetTargetTypeOnNonAttachableMember","messagePattern":"SR\\.GetTargetTypeOnNonAttachableMember","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/Schema/XaslMember.cs","lineNumber":217,"sourceCode":"        protected override bool IsReadOnlyCore\n        {\n            get { return _isReadOnly; }\n            set { _isReadOnly = value; }\n        }\n\n        protected override bool IsStaticCore\n        {\n            get { return _isStatic; }\n            set { _isStatic = value; }\n        }\n\n        // Leave these to derived types.\n        //protected override bool IsAttachableCore { get; set; }\n        //protected override bool IsEventCore { get; set; }\n        //protected override bool IsDirectiveCore { get; set; }\n        protected override XamlType TargetTypeCore\n        {\n            get { throw new InvalidOperationException(SR.GetTargetTypeOnNonAttachableMember); }\n            set { throw new InvalidOperationException(SR.SetTargetTypeOnNonAttachableMember); }\n        }\n\n        protected override AllowedMemberLocation AllowedLocationCore\n        {\n            get { return _allowedLocation; }\n            set { _allowedLocation = value; }\n        }\n\n        protected override XamlProperty DependsOnCore\n        {\n            get { return _dependsOn; }\n            set { _dependsOn = value; }\n        }\n\n        protected override bool IsAmbientCore\n        {\n            get { return _isAmbient; }","sourceCodeStart":199,"sourceCodeEnd":235,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/Schema/XaslMember.cs#L199-L235","documentation":"XaslMember.TargetTypeCore throws InvalidOperationException when the getter is called on a XamlMember that is not an attachable member. TargetType is only meaningful for attachable members (e.g. `x:Static`-style attached properties), whose target type can differ from the declaring type. The base class deliberately rejects the call so consumers do not silently get a wrong type.","triggerScenarios":"Accessing the TargetType property (or TargetTypeCore) of a XamlMember instance that represents a regular (non-attachable) property, event, or directive — e.g. calling member.TargetType after obtaining a member from a XamlType.GetMember call.","commonSituations":"Tooling or serializers that enumerate XAML members and unconditionally read TargetType for every member; code that assumes all members obtained from a schema context are attachable; reflection-style XAML inspection utilities.","solutions":["Check member.IsAttachable before reading TargetType and skip or handle non-attachable members separately","For regular members, use the DeclaringType property instead of TargetType","Wrap the read in a try/catch for InvalidOperationException only if IsAttachable cannot be checked"],"exampleFix":"// before\nXamlType tt = member.TargetType;\n\n// after\nXamlType tt = member.IsAttachable ? member.TargetType : member.DeclaringType;","handlingStrategy":"type-guard","validationCode":"if (member == null) throw new ArgumentNullException(nameof(member));\nif (member.IsAttachable)\n{\n    var tt = member.TargetType; // safe\n}\nelse\n{\n    var declaring = member.DeclaringType; // use instead\n}","typeGuard":"bool IsAttachableMember(XamlMember m) => m != null && m.IsAttachable;","tryCatchPattern":"try\n{\n    var tt = member.TargetType;\n}\ncatch (InvalidOperationException ex) when (ex.Message.Contains(\"attachable\"))\n{\n    // fall back to member.DeclaringType\n    var tt = member.DeclaringType;\n}","preventionTips":["Always check IsAttachable before touching TargetType","Use DeclaringType for regular members","Centralize member-inspection helpers so the guard is written once","Never assume members from arbitrary schema contexts are attachable"],"tags":["xaml","invalid-operation","attachable-member","wpf"],"backgroundTag":"unsupported-operation","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"}