{"record":{"id":"d9ba27eb1b17a3da","repo":"dotnet/wpf","slug":"sr-settargettypeonnonattachablemember","errorCode":null,"errorMessage":"SR.SetTargetTypeOnNonAttachableMember","messagePattern":"SR\\.SetTargetTypeOnNonAttachableMember","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/Schema/XaslMember.cs","lineNumber":218,"sourceCode":"        {\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; }\n            set { _isAmbient = value; }","sourceCodeStart":200,"sourceCodeEnd":236,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/Schema/XaslMember.cs#L200-L236","documentation":"XaslMember.TargetTypeCore setter throws InvalidOperationException because TargetType on a non-attachable member must never be mutated. The library treats the target type of ordinary members as derived state that callers cannot assign; only attachable members have a settable target type.","triggerScenarios":"Assigning to XamlMember.TargetType (or the TargetTypeCore override) on a member that is not attachable — e.g. member.TargetType = someType on a property fetched via XamlType.GetMember.","commonSituations":"Framework/tooling code that tries to re-target a regular XAML property during schema manipulation or custom schema provider implementations that call the base setter.","solutions":["Do not assign TargetType on non-attachable members; construct the member with the correct target type instead","Implement a custom XamlMember subclass overriding TargetTypeCore only for attachable members","Use the protected constructor of XamlMember that accepts an attachable property info so TargetType is populated correctly"],"exampleFix":"// before\nmember.TargetType = targetType; // throws\n\n// after\nvar attachable = new XamlMember(attachablePropertyInfo, schemaContext); // TargetType derived from the attached property","handlingStrategy":"validation","validationCode":"if (member == null) throw new ArgumentNullException(nameof(member));\nif (member.IsAttachable)\n    member.TargetType = newType; // legal only for attachable members\nelse\n    throw new InvalidOperationException(\"TargetType is read-only for non-attachable members.\");","typeGuard":"bool CanSetTargetType(XamlMember m) => m is XamlMember { IsAttachable: true };","tryCatchPattern":"try\n{\n    member.TargetType = newType;\n}\ncatch (InvalidOperationException ex)\n{\n    logger.Warn(ex, \"Cannot set TargetType on non-attachable member {0}\", member.Name);\n}","preventionTips":["Treat XamlMember metadata as immutable once created","Build members with the correct target type via the constructor/attached-property info","Avoid mutating schema objects shared across threads or consumers","Subclass XamlMember for custom target-type behavior instead of post-assignment"],"tags":["xaml","invalid-operation","readonly-property","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"}