{"record":{"id":"f4620ab4a082672b","repo":"spectreconsole/spectre.console","slug":"output-writer-was-null","errorCode":null,"errorMessage":"Output writer was null","messagePattern":"Output writer was null","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/Spectre.Console/AnsiConsoleFactory.cs","lineNumber":15,"sourceCode":"namespace Spectre.Console;\n\n/// <summary>\n/// Factory for creating an ANSI console.\n/// </summary>\ninternal sealed class AnsiConsoleFactory\n{\n    public static IAnsiConsole Create(AnsiConsoleSettings settings)\n    {\n        ArgumentNullException.ThrowIfNull(settings);\n\n        var output = settings.Out ?? new AnsiConsoleOutput(System.Console.Out);\n        if (output.Writer == null)\n        {\n            throw new InvalidOperationException(\"Output writer was null\");\n        }\n\n        // Get the capabilities of the terminal\n        var caps = Capabilities.Create(output.Writer, settings, out var encoding);\n\n        // Create a profile using the capabilities and enrich it\n        var profile = new Profile(output, caps, encoding);\n        ProfileEnricher.Enrich(\n            profile,\n            settings.Enrichment,\n            settings.EnvironmentVariables);\n\n        return new AnsiConsoleFacade(\n            profile,\n            settings.ExclusivityMode ?? new DefaultExclusivityMode());\n    }\n}","sourceCodeStart":1,"sourceCodeEnd":32,"githubUrl":"https://github.com/spectreconsole/spectre.console/blob/0acc92fada6c42f13984e79c2b5f3d993bdfb099/src/Spectre.Console/AnsiConsoleFactory.cs#L1-L32","documentation":"Thrown by AnsiConsoleFactory.Create when settings.Out is non-null but its Writer property is null. The default AnsiConsoleOutput never exposes a null Writer (its constructor rejects null), so this only happens when a custom IAnsiConsoleOutput implementation returns null from its Writer getter. Creation cannot proceed without a writable target.","triggerScenarios":"Passing AnsiConsoleSettings with Out set to a custom IAnsiConsoleOutput whose Writer is null.","commonSituations":"A custom/mocked IAnsiConsoleOutput that lazily resolves a TextWriter which has not been set; a decorator that forwards to an inner output whose Writer is null; a test double with an uninitialized Writer field.","solutions":["Ensure your custom IAnsiConsoleOutput.Writer returns a non-null TextWriter (e.g. StringWriter or Console.Out)","If you do not need a custom output, leave settings.Out null so the default Console.Out path is used","Initialize the Writer before constructing the console, not lazily"],"exampleFix":"// before\nsettings.Out = new MyOutput { Writer = null };\nvar console = AnsiConsoleFactory.Create(settings); // throws\n\n// after\nsettings.Out = new AnsiConsoleOutput(Console.Out); // or a StringWriter\nvar console = AnsiConsoleFactory.Create(settings);","handlingStrategy":"validation","validationCode":"// Validate a custom IAnsiConsoleOutput before console creation\nif (settings.Out is not null && settings.Out.Writer is null)\n    throw new InvalidOperationException(\"settings.Out.Writer is null\");\n\nvar console = AnsiConsoleFactory.Create(settings);","typeGuard":"static bool HasWriter(IAnsiConsoleOutput? out) => out?.Writer is not null;","tryCatchPattern":"try\n{\n    var console = AnsiConsoleFactory.Create(settings);\n}\ncatch (InvalidOperationException ex) when (ex.Message == \"Output writer was null\")\n{\n    // custom IAnsiConsoleOutput returned a null Writer\n}","preventionTips":["Prefer the built-in AnsiConsoleOutput over custom IAnsiConsoleOutput unless you need it","Initialize your custom output's Writer eagerly, never lazily","Unit-test custom outputs to confirm Writer is non-null"],"tags":["console","factory","null-check","io","configuration"],"backgroundTag":null,"analyzedSha":"0acc92fada6c42f13984e79c2b5f3d993bdfb099","analyzedAt":"2026-08-13T18:27:21.983Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}