{"record":{"id":"3b1605b508734bc0","repo":"RicoSuter/NSwag","slug":"propertynamegenerator-not-set","errorCode":null,"errorMessage":"PropertyNameGenerator not set.","messagePattern":"PropertyNameGenerator not set\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/NSwag.CodeGeneration/Models/ParameterModelBase.cs","lineNumber":47,"sourceCode":"        /// <param name=\"allParameters\">All parameters.</param>\r\n        /// <param name=\"settings\">The settings.</param>\r\n        /// <param name=\"generator\">The client generator base.</param>\r\n        /// <param name=\"typeResolver\">The type resolver.</param>\r\n        protected ParameterModelBase(string parameterName, string variableName, string typeName,\r\n            OpenApiParameter parameter, IList<OpenApiParameter> allParameters, CodeGeneratorSettingsBase settings,\r\n            IClientGenerator generator, TypeResolverBase typeResolver)\r\n        {\r\n            _allParameters = allParameters;\r\n            _parameter = parameter;\r\n            _settings = settings;\r\n            _generator = generator;\r\n            _typeResolver = typeResolver;\r\n\r\n            Type = typeName;\r\n            Name = parameterName;\r\n            VariableName = variableName;\r\n\r\n            var propertyNameGenerator = settings?.PropertyNameGenerator ?? throw new InvalidOperationException(\"PropertyNameGenerator not set.\");\r\n\r\n            _properties = _parameter.ActualSchema.ActualProperties\r\n                .Select(p => new PropertyModel(p.Key, p.Value, propertyNameGenerator.Generate(p.Value)))\r\n                .ToList();\r\n        }\r\n\r\n        /// <summary>Gets the type of the parameter.</summary>\r\n        public string Type { get; }\r\n\r\n        /// <summary>Gets the name.</summary>\r\n        public string Name { get; }\r\n\r\n        /// <summary>Gets the variable name in (usually lowercase).</summary>\r\n        public string VariableName { get; }\r\n\r\n        /// <summary>Gets a value indicating whether a default value is available.</summary>\r\n        public bool HasDefault => Default != null;\r\n\r","sourceCodeStart":29,"sourceCodeEnd":65,"githubUrl":"https://github.com/RicoSuter/NSwag/blob/63daf8fcc3a25151b62eb4b326a1e8ea048a0d41/src/NSwag.CodeGeneration/Models/ParameterModelBase.cs#L29-L65","documentation":"ParameterModelBase requires the generator settings to carry a PropertyNameGenerator, which converts schema property names into language-valid property identifiers for the generated model. If settings is null or PropertyNameGenerator is unset, the constructor throws InvalidOperationException('PropertyNameGenerator not set.').","triggerScenarios":"Constructing a client generator (CSharpClientGenerator/TypeScriptClientGenerator etc.) with settings lacking PropertyNameGenerator, or passing null settings, e.g. new CSharpClientGenerator(document, new ClientGeneratorBaseSettings { ... } without PropertyNameGenerator).","commonSituations":"Using NSwag programmatically (not via NSwagStudio/nswag CLI) and building settings objects manually; forgetting to initialize base settings classes; custom generators not inheriting default settings factories.","solutions":["Set settings.PropertyNameGenerator, or create settings via the factory method (e.g. CSharpGeneratorBaseSettings.CreateWithDefaults / CSharpClientGeneratorSettings defaults).","Use NSwagStudio or the nswag CLI document pipeline which populates defaults automatically.","Check that you are not passing null settings into the generator constructor."],"exampleFix":"// before\nvar settings = new CSharpClientGeneratorSettings();\nvar generator = new CSharpClientGenerator(document, settings);\n// after\nvar settings = new CSharpClientGeneratorSettings();\nsettings.PropertyNameGenerator = (property) => ConversionUtilities.ConvertToUpperCamelCase(property.Name, true);\nvar generator = new CSharpClientGenerator(document, settings);","handlingStrategy":"type-guard","validationCode":"if (settings == null || settings.PropertyNameGenerator == null)\n    throw new InvalidOperationException(\"Initialize PropertyNameGenerator before constructing the parameter model.\");","typeGuard":"bool HasPropertyNameGenerator(ClientGeneratorBaseSettings s) => s?.PropertyNameGenerator != null;","tryCatchPattern":"try { var generator = new CSharpClientGenerator(document, settings); }\ncatch (InvalidOperationException ex) when (ex.Message == \"PropertyNameGenerator not set.\") { logger.LogError(ex, \"Generator settings were not fully initialized\"); throw; }","preventionTips":["When building settings programmatically, construct derived settings types (CSharpClientGeneratorSettings) that initialize defaults.","Never pass null settings into NSwag generator constructors.","If overriding PropertyNameGenerator, do so immediately after settings construction, before model creation."],"tags":["code-generation","configuration","programmatic-usage","nswag"],"backgroundTag":"missing-required-config-field","analyzedSha":"63daf8fcc3a25151b62eb4b326a1e8ea048a0d41","analyzedAt":"2026-09-14T11:38:15.205Z","contentChangedAt":"2026-09-14T11:38:15.205Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}