{"record":{"id":"1a4f41b7e78352af","repo":"microsoft/aspire","slug":"integration-package-probe-manifest-entry-is-missing-required","errorCode":null,"errorMessage":"Integration package probe manifest entry is missing required property '{propertyName}'.","messagePattern":"Integration package probe manifest entry is missing required property '(.+?)'\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/Shared/IntegrationPackageProbeManifest.cs","lineNumber":377,"sourceCode":"        }\n        catch (Exception ex) when (ex is ArgumentException or NotSupportedException or PathTooLongException)\n        {\n            throw new InvalidOperationException(invalidPathMessage, ex);\n        }\n    }\n\n    private static string? NormalizeCulture(string? culture)\n    {\n        return string.IsNullOrWhiteSpace(culture) || string.Equals(culture, \"neutral\", StringComparison.OrdinalIgnoreCase)\n            ? null\n            : culture.Trim();\n    }\n\n    private static string NormalizeRequiredValue(string? value, string propertyName)\n    {\n        if (string.IsNullOrWhiteSpace(value))\n        {\n            throw new InvalidOperationException($\"Integration package probe manifest entry is missing required property '{propertyName}'.\");\n        }\n\n        return value.Trim();\n    }\n\n    private static string? NormalizeOptionalValue(string? value)\n    {\n        return string.IsNullOrWhiteSpace(value) ? null : value.Trim();\n    }\n\n    private static IReadOnlyList<IntegrationPackageManagedAssembly> ReadManagedAssemblies(JsonElement rootElement)\n    {\n        if (!rootElement.TryGetProperty(\"managedAssemblies\", out var managedAssembliesElement) ||\n            managedAssembliesElement.ValueKind != JsonValueKind.Array)\n        {\n            return [];\n        }\n","sourceCodeStart":359,"sourceCodeEnd":395,"githubUrl":"https://github.com/microsoft/aspire/blob/25830f84bd145686607ad00c057b3f84e2e51d43/src/Shared/IntegrationPackageProbeManifest.cs#L359-L395","documentation":"NormalizeRequiredValue validates that a required string property from a probe-manifest entry has a non-whitespace value, trimming and returning it. If the value is null, empty, or whitespace-only, it throws InvalidOperationException naming the missing property. This is the normalization-stage guard complementing the JSON-level check in ReadStringProperty.","triggerScenarios":"A manifest entry passes JSON parsing but a required property (e.g. 'name', 'path') is present yet null, empty (\"\"), or whitespace-only (\"   \").","commonSituations":"Hand-edited manifests with \"path\": \"\"; generated manifests where an upstream tool emitted empty strings for missing values; copy-paste of a template entry without filling values.","solutions":["Open the manifest JSON and supply a real value for the property named in the message.","Regenerate the manifest so required fields are populated from the package contents.","Validate the manifest schema before loading (all required properties non-empty strings)."],"exampleFix":"// before\n{ \"name\": \"\", \"path\": \"lib.so\" }\n\n// after\n{ \"name\": \"MyLib\", \"path\": \"lib.so\" }","handlingStrategy":"validation","validationCode":"static void EnsureNonEmpty(JsonElement e, string prop)\n{\n    if (!e.TryGetProperty(prop, out var v) || v.ValueKind != JsonValueKind.String || string.IsNullOrWhiteSpace(v.GetString()))\n        throw new InvalidOperationException($\"Manifest entry property '{prop}' must be a non-empty string.\");\n}","typeGuard":null,"tryCatchPattern":"try { LoadManifest(path); }\ncatch (InvalidOperationException ex) when (ex.Message.Contains(\"missing required property\"))\n{ logger.LogError(ex, \"Probe manifest has an empty required property\"); throw; }","preventionTips":["Validate manifest JSON against a schema (all required props non-empty strings) before loading.","Never write \"\" or null placeholders for required fields when generating manifests.","Review hand-edits to manifests in PRs with a schema check."],"tags":["manifest","validation","empty-value"],"backgroundTag":"empty-required-field","analyzedSha":"25830f84bd145686607ad00c057b3f84e2e51d43","analyzedAt":"2026-09-16T11:10:06.193Z","contentChangedAt":"2026-09-16T11:10:06.193Z","schemaVersion":2},"datasetVersion":"2026-09-21T04:17:39.646Z"}