{"record":{"id":"4591b340d0aa3fba","repo":"microsoft/aspire","slug":"unexpected-millisecondsdisplay-value-millisecondsdisplay","errorCode":null,"errorMessage":"Unexpected MillisecondsDisplay value: {millisecondsDisplay}.","messagePattern":"Unexpected MillisecondsDisplay value: (.+?)\\.","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"src/Shared/DateFormatStringsHelpers.cs","lineNumber":124,"sourceCode":"\n            return pattern;\n        }\n    }\n\n    internal static string GetLongTimePattern(CultureInfo cultureInfo, TimeFormat timeFormat, MillisecondsDisplay millisecondsDisplay)\n        => GetPattern(GetDateFormatStrings(cultureInfo, timeFormat).LongTimePattern, millisecondsDisplay);\n\n    internal static string GetShortDateLongTimePattern(CultureInfo cultureInfo, TimeFormat timeFormat, MillisecondsDisplay millisecondsDisplay)\n        => GetPattern(GetDateFormatStrings(cultureInfo, timeFormat).ShortDateLongTimePattern, millisecondsDisplay);\n\n    private static string GetPattern(CachedTimeFormatStrings patterns, MillisecondsDisplay millisecondsDisplay)\n    {\n        return millisecondsDisplay switch\n        {\n            MillisecondsDisplay.None => patterns.None,\n            MillisecondsDisplay.Truncated => patterns.TruncatedMilliseconds,\n            MillisecondsDisplay.Full => patterns.FullMilliseconds,\n            _ => throw new ArgumentException($\"Unexpected {nameof(MillisecondsDisplay)} value: {millisecondsDisplay}.\", nameof(millisecondsDisplay))\n        };\n    }\n}\n","sourceCodeStart":106,"sourceCodeEnd":128,"githubUrl":"https://github.com/microsoft/aspire/blob/25830f84bd145686607ad00c057b3f84e2e51d43/src/Shared/DateFormatStringsHelpers.cs#L106-L128","documentation":"GetPattern maps a MillisecondsDisplay enum value to a corresponding date/time format pattern from the supplied pattern set. It throws ArgumentException (with the parameter name) when the enum value is outside the defined None/Truncated/Full set — normally only possible via an invalid cast or a value from a newer enum version.","triggerScenarios":"Passing a MillisecondsDisplay value that is not None, Truncated, or Full — e.g. an unchecked (MillisecondsDisplay)99 cast, deserialized/binary-copied enum data, or a value added in a newer package version while patterns were compiled against the old one.","commonSituations":"Reading a user preference (milliseconds display) from config stored as int and casting without validation; shared settings files written by a newer app version read by an older one.","solutions":["Validate the value is a defined MillisecondsDisplay member (Enum.IsDefined) before passing it","Fix the source of the invalid value (config/settings store) so it contains 0, 1, or 2","If value comes from config parsing, use Enum.TryParse with a fallback default instead of a raw cast","Realign package versions if the value was produced by a newer Aspire version"],"exampleFix":"// before\nvar pattern = DateFormatStringsHelpers.GetPattern((MillisecondsDisplay)settings.MsDisplay, patterns);\n// after\nvar msDisplay = Enum.IsDefined(typeof(MillisecondsDisplay), settings.MsDisplay)\n    ? (MillisecondsDisplay)settings.MsDisplay\n    : MillisecondsDisplay.None;\nvar pattern = DateFormatStringsHelpers.GetPattern(msDisplay, patterns);","handlingStrategy":"validation","validationCode":"bool isValid = Enum.IsDefined(typeof(MillisecondsDisplay), millisecondsDisplay);\nif (!isValid) millisecondsDisplay = MillisecondsDisplay.None;","typeGuard":"static bool IsDefinedMillisecondsDisplay(MillisecondsDisplay value) =>\n    value is MillisecondsDisplay.None or MillisecondsDisplay.Truncated or MillisecondsDisplay.Full;","tryCatchPattern":"try { return DateFormatStringsHelpers.GetPattern(value, patterns); }\ncatch (ArgumentException) { return patterns.None; /* fall back to default pattern */ }","preventionTips":["Never cast ints to MillisecondsDisplay without Enum.IsDefined","Use Enum.TryParse when reading enum values from config or storage","Keep Aspire package versions aligned across components sharing settings"],"tags":["enum","argument","date-format","dashboard"],"backgroundTag":"invalid-enum-value","analyzedSha":"25830f84bd145686607ad00c057b3f84e2e51d43","analyzedAt":"2026-09-16T11:10:06.193Z","contentChangedAt":"2026-09-16T11:10:06.193Z","schemaVersion":2},"datasetVersion":"2026-09-21T09:17:21.228Z"}