{"record":{"id":"d901b98752079e4b","repo":"dotnet/wpf","slug":"sr-bamlwriterbadstream","errorCode":null,"errorMessage":"SR.BamlWriterBadStream","messagePattern":"SR\\.BamlWriterBadStream","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Markup/BamlWriter.cs","lineNumber":31,"sourceCode":"namespace System.Windows.Markup\n{\n    /// <summary>\n    /// Writes BAML records to Stream and exposes an XmlWriter-liker interface for BAML\n    /// </summary>\n    internal class BamlWriter : IParserHelper\n    {\n#region Constructor\n\n        /// <summary>\n        /// Create a BamlWriter on the passed stream.  The stream must be writable.\n        /// </summary>\n        public BamlWriter(\n            Stream stream)\n        {\n            ArgumentNullException.ThrowIfNull(stream);\n            if (!stream.CanWrite)\n            {\n                throw new ArgumentException(SR.BamlWriterBadStream);\n            }\n            \n            _parserContext = new ParserContext();\n            if (null == _parserContext.XamlTypeMapper) \n            {\n                _parserContext.XamlTypeMapper = new BamlWriterXamlTypeMapper(XmlParserDefaults.GetDefaultAssemblyNames(),\n                                                                             XmlParserDefaults.GetDefaultNamespaceMaps());\n            }\n            _xamlTypeMapper = _parserContext.XamlTypeMapper;\n            _bamlRecordWriter = new BamlRecordWriter(stream, _parserContext, true);\n            _startDocumentWritten = false;\n            _depth = 0;\n            _closed = false;\n            _nodeTypeStack = new ParserStack();\n            _assemblies = new Hashtable(7);\n           _extensionParser = new MarkupExtensionParser((IParserHelper)this, _parserContext);\n           _markupExtensionNodes = new ArrayList();\n        }","sourceCodeStart":13,"sourceCodeEnd":49,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Markup/BamlWriter.cs#L13-L49","documentation":"The BamlWriter constructor validates the target stream with ArgumentNullException.ThrowIfNull and then ArgumentException(SR.BamlWriterBadStream) when stream.CanWrite is false. You passed a read-only or closed stream, so BAML output cannot be written.","triggerScenarios":"new BamlWriter(stream) where stream is null, read-only (e.g. FileStream opened FileAccess.Read), or a closed/disposed stream whose CanWrite returns false.","commonSituations":"Opening a file with FileMode.Open/Read access and handing it to BamlWriter, passing Console.In or a memory stream built for reading, reusing a stream already disposed elsewhere.","solutions":["Open the stream with write access: new FileStream(path, FileMode.Create, FileAccess.Write)","Check stream.CanWrite before constructing BamlWriter and surface a friendly error","Create a fresh output stream; do not reuse disposed or input streams","For null, ensure the stream-producing call succeeded before construction"],"exampleFix":"// before\nvar s = File.OpenRead(\"out.baml\"); var w = new BamlWriter(s);\n// after\nvar s = File.Open(\"out.baml\", FileMode.Create, FileAccess.Write); var w = new BamlWriter(s);","handlingStrategy":"validation","validationCode":"if (stream == null) throw new ArgumentNullException(nameof(stream));\nif (!stream.CanWrite) throw new ArgumentException(\"Stream must be writable for BamlWriter\", nameof(stream));\nvar writer = new BamlWriter(stream);","typeGuard":"static bool IsWritableStream(Stream s) => s is { CanWrite: true };","tryCatchPattern":"try { var w = new BamlWriter(stream); }\ncatch (ArgumentNullException) { /* stream null — fix producer */ }\ncatch (ArgumentException ex) { throw new InvalidOperationException(\"Provide a writable stream for BAML output\", ex); }","preventionTips":["Always open output streams with FileAccess.Write","Check CanWrite before constructing writers","Never pass disposed/read streams to BamlWriter"],"tags":["wpf","baml","stream","invalid-argument"],"backgroundTag":"invalid-argument-value","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"}