{"record":{"id":"8eeb26b3e763819e","repo":"microsoft/aspire","slug":"value-cannot-be-null-parameter-value","errorCode":null,"errorMessage":"Value cannot be null. (Parameter 'value')","messagePattern":"Value cannot be null\\. \\(Parameter 'value'\\)","errorType":"exception","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"src/Aspire.Hosting.Azure.KeyVault/AzureKeyVaultSecretResource.cs","lineNumber":35,"sourceCode":"public class AzureKeyVaultSecretResource(string name, string secretName, AzureKeyVaultResource parent, object value)\n    : Resource(name), IResourceWithParent<AzureKeyVaultResource>, IAzureKeyVaultSecretReference\n{\n    private readonly IAzureKeyVaultSecretReference _secret = parent.GetSecret(secretName);\n\n    /// <summary>\n    /// Gets or sets the secret name.\n    /// </summary>\n    public string SecretName => _secret.SecretName;\n\n    /// <summary>\n    /// Gets the parent Azure Key Vault resource.\n    /// </summary>\n    public AzureKeyVaultResource Parent { get; } = parent ?? throw new ArgumentNullException(nameof(parent));\n\n    /// <summary>\n    /// Gets the value provider for the secret.\n    /// </summary>\n    public object Value { get; } = value ?? throw new ArgumentNullException(nameof(value));\n\n    /// <summary>\n    /// Gets the Azure Key Vault resource that contains this secret.\n    /// </summary>\n    IAzureKeyVaultResource IAzureKeyVaultSecretReference.Resource => Parent;\n\n    IResource? IAzureKeyVaultSecretReference.SecretOwner { get; set; }\n\n    /// <summary>\n    /// Gets the expression for the secret value in the manifest.\n    /// </summary>\n    string IManifestExpressionProvider.ValueExpression => _secret.ValueExpression;\n\n    /// <summary>\n    /// Gets the secret value asynchronously.\n    /// </summary>\n    /// <param name=\"cancellationToken\">The cancellation token.</param>\n    /// <returns>The secret value.</returns>","sourceCodeStart":17,"sourceCodeEnd":53,"githubUrl":"https://github.com/microsoft/aspire/blob/25830f84bd145686607ad00c057b3f84e2e51d43/src/Aspire.Hosting.Azure.KeyVault/AzureKeyVaultSecretResource.cs#L17-L53","documentation":"The AzureKeyVaultSecretResource constructor validates its 'value' argument and throws ArgumentNullException ('Value cannot be null. (Parameter \\'value\\')') when null is supplied. The Value property holds the secret's value provider (an IValueProvider/manifest expression) and must always be present.","triggerScenarios":"Constructing AzureKeyVaultSecretResource directly with null for the value parameter, or calling low-level/factory paths where the secret's value expression failed to build.","commonSituations":"Unit tests building the resource manually, helper code passing a null parameter resource result, or refactoring that changed the value provider to return null.","solutions":["Pass a non-null value provider (e.g. a ParameterResource or ReferenceExpression-based IValueProvider) as the value argument.","Use the AddSecret extension APIs so value construction is handled for you.","In tests, supply a simple non-null IValueProvider implementation or parameter resource."],"exampleFix":"// before\nvar secret = new AzureKeyVaultSecretResource(name, secretName, null!, vault);\n\n// after\nvar param = builder.AddParameter(\"db-password\", secret: true);\nvar secret = new AzureKeyVaultSecretResource(name, secretName, param.Resource, vault);","handlingStrategy":"validation","validationCode":"if (value is null)\n{\n    throw new ArgumentNullException(nameof(value), \"A non-null value provider is required to construct a secret resource.\");\n}","typeGuard":null,"tryCatchPattern":"try { var secret = new AzureKeyVaultSecretResource(...); }\ncatch (ArgumentNullException ex) when (ex.ParamName == \"value\") { /* build the value provider first */ }","preventionTips":["Build the parameter/expression value before constructing the secret resource.","Use AddSecret so value wiring is handled for you.","Check factory methods for paths that can return null value providers."],"tags":["azure","key-vault","null-argument","constructor"],"backgroundTag":"null-argument","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"}