{"record":{"id":"6cccf1fe94dcfaf9","repo":"dotnet/wpf","slug":"sr-format-sr-templatenotcollected-writeendmember","errorCode":null,"errorMessage":"SR.Format(SR.TemplateNotCollected, \"WriteEndMember\")","messagePattern":"SR\\.Format\\(SR\\.TemplateNotCollected, \"WriteEndMember\"\\)","errorType":"exception","errorClass":"XamlInternalException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/InfosetObjects/DeferredWriter.cs","lineNumber":175,"sourceCode":"                _deferredWriter.WriteStartMember(property);\n                _handled = true;\n                break;\n\n            default:\n                throw new XamlInternalException(SR.Format(SR.MissingCase, _mode.ToString(), \"WriteMember\"));\n            }\n        }\n\n        public override void WriteEndMember()\n        {\n            _handled = false;\n            switch (_mode)\n            {\n            case DeferringMode.Off:\n                break;\n\n            case DeferringMode.TemplateReady:\n                throw new XamlInternalException(SR.Format(SR.TemplateNotCollected, \"WriteEndMember\"));\n\n            case DeferringMode.TemplateDeferring:\n                _deferredWriter.WriteEndMember();\n                _handled = true;\n                break;\n\n            default:\n                throw new XamlInternalException(SR.Format(SR.MissingCase, _mode.ToString(), \"WriteEndMember\"));\n            }\n        }\n\n        public override void WriteValue(object value)\n        {\n            _handled = false;\n            switch (_mode)\n            {\n            case DeferringMode.Off:\n                break;","sourceCodeStart":157,"sourceCodeEnd":193,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/System.Xaml/System/Xaml/InfosetObjects/DeferredWriter.cs#L157-L193","documentation":"XamlInternalException with SR.TemplateNotCollected thrown from DeferredWriter.WriteEndMember when the writer is in DeferringMode.TemplateReady. Closing a member while TemplateReady means the writer is still waiting for template collection to start, so an end-member write has no matching open member in any deferred region.","triggerScenarios":"WriteEndMember called while _mode == TemplateReady — typically the node stream ends a member immediately after the template became ready, without the template content being collected through TemplateDeferring.","commonSituations":"Unbalanced WriteStartMember/WriteEndMember pairs spanning the template boundary; custom node-stream transforms that swallow the template-start event; earlier TemplateReady exceptions shifting the stream out of alignment.","solutions":["Balance member writes inside the deferred region only after TemplateDeferring is active","Run the node stream through the standard deferring reader/writer pair instead of hand-driving WriteEndMember","Reinitialize the DeferredWriter to clear the stuck TemplateReady state","Validate the stream with a plain XamlXmlWriter first to catch imbalance before deferring"],"exampleFix":"// before\nwriter.WriteEndMember(); // _mode == TemplateReady -> TemplateNotCollected\n// after\n// enter deferred region first, then close members\nwriter.WriteStartMember(member); writer.WriteEndMember(); // balanced within TemplateDeferring","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { deferringWriter.WriteEndMember(); }\ncatch (XamlInternalException ex) { log.Error(\"WriteEndMember in TemplateReady state: {0}\", ex.Message); }","preventionTips":["Balance StartMember/EndMember within the deferred region only","Validate stream balance with a non-deferring writer before deferring","Reset the writer if TemplateReady persists unexpectedly","Avoid swallowing earlier XAML exceptions that shift the stream"],"tags":["xaml","internal-exception","deferring-writer","state-machine"],"backgroundTag":"internal-invariant-violation","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"}