{"record":{"id":"33459b45c85ccc6e","repo":"dotnet/wpf","slug":"argumentnullexception-nameof-assemblyname","errorCode":null,"errorMessage":"ArgumentNullException(nameof(assemblyName))","messagePattern":"ArgumentNullException\\(nameof\\(assemblyName\\)\\)","errorType":"validation","errorClass":"ArgumentNullException","httpStatus":null,"severity":"error","filePath":"src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Markup/XamlTypeMapper.cs","lineNumber":147,"sourceCode":"        /// <param name=\"assemblyName\">\n        /// The \"PresentationFramework\" argument in the mapping PI example.\n        /// </param>\n        public void AddMappingProcessingInstruction(\n            string  xmlNamespace,\n            string  clrNamespace,\n            string  assemblyName )\n        {\n            if( null == xmlNamespace )\n            {\n                throw new ArgumentNullException(nameof(xmlNamespace));\n            }\n            if( null == clrNamespace )\n            {\n                throw new ArgumentNullException(nameof(clrNamespace));\n            }\n            if( null == assemblyName )\n            {\n                throw new ArgumentNullException(nameof(assemblyName));\n            }\n\n            // Parameter validation : Check for String.Empty as well?\n\n            // Add mapping to the table keyed by xmlNamespace\n            ClrNamespaceAssemblyPair pair = new ClrNamespaceAssemblyPair(clrNamespace, assemblyName);\n            PITable[xmlNamespace] = pair;\n\n            // Add mapping to the table keyed by assembly and clrnamespace\n            string upperAssemblyName = assemblyName.ToUpper(\n                                              TypeConverterHelper.InvariantEnglishUS);\n            String fullName = $\"{clrNamespace}#{upperAssemblyName}\";\n\n            _piReverseTable[fullName] = xmlNamespace;\n\n            // Add mapping to the SchemaContext\n            _schemaContext?.SetMappingProcessingInstruction(xmlNamespace, pair);\n        }","sourceCodeStart":129,"sourceCodeEnd":165,"githubUrl":"https://github.com/dotnet/wpf/blob/81131a70a4c573cd62748a5c36908fc4d662daa9/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Markup/XamlTypeMapper.cs#L129-L165","documentation":"XamlTypeMapper.AddMappingProcessingInstruction validates its clrNamespace and assemblyName parameters and throws ArgumentNullException when assemblyName is null. This API adds a <?Mapping ...?> processing instruction equivalent to the mapper's table so ClrNamespace URIs resolve to assemblies. The library throws immediately to fail fast on invalid mapping input before building a ClrNamespaceAssemblyPair.","triggerScenarios":"Calling XamlTypeMapper.AddMappingProcessingInstruction(xmlNamespace, clrNamespace, assemblyName) with a null assemblyName argument, e.g. when the assembly string is built dynamically from config or reflection and comes back null.","commonSituations":"Programmatic XAML mapping setup where the assembly name is read from configuration or a dictionary lookup that returns null; refactoring that renamed an assembly constant to null; WPF parser extension code building mapping instructions at runtime.","solutions":["Pass a non-null assembly name string as the third argument to AddMappingProcessingInstruction","Verify the variable feeding assemblyName is initialized; add a null check or coalesce to a default assembly","If the assembly may not be known, resolve it via Assembly.GetName().Name instead of passing null"],"exampleFix":"// before\nmapper.AddMappingProcessingInstruction(xmlNamespace, clrNamespace, null);\n// after\nmapper.AddMappingProcessingInstruction(xmlNamespace, clrNamespace, \"MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\");","handlingStrategy":"validation","validationCode":"if (xmlNamespace == null) throw new ArgumentException(\"xmlNamespace required\");\nif (clrNamespace == null) throw new ArgumentException(\"clrNamespace required\");\nif (assemblyName == null) throw new ArgumentException(\"assemblyName required\");\nmapper.AddMappingProcessingInstruction(xmlNamespace, clrNamespace, assemblyName);","typeGuard":"bool IsValidMappingArgs(string clrNamespace, string assemblyName) => !string.IsNullOrEmpty(clrNamespace) && !string.IsNullOrEmpty(assemblyName);","tryCatchPattern":"try\n{\n    mapper.AddMappingProcessingInstruction(xmlNs, clrNs, asmName);\n}\ncatch (ArgumentNullException ex)\n{\n    log.LogError(ex, \"Mapping PI arguments incomplete: {Param}\", ex.ParamName);\n}","preventionTips":["Validate mapping strings before every mapper API call","Never pass configuration-derived strings without a null check","Prefer Assembly.GetName().Name over hand-built names"],"tags":["wpf","xaml","argument-null"],"backgroundTag":"null-argument","analyzedSha":"81131a70a4c573cd62748a5c36908fc4d662daa9","analyzedAt":"2026-09-14T10:12:48.479Z","contentChangedAt":"2026-09-14T10:12:48.479Z","schemaVersion":2},"datasetVersion":"2026-09-21T21:30:21.729Z"}