Upgrading AutoMapper 14 to 15
Breaking14.0.0 → 15.1.3Breaking4Security5Changed4Fixed3Other4
SecurityFixes GHSA-rvv3-g6hj-g44x by defaulting MaxDepth to 64 for self-referential types, preventing uncontrolled recursion during mapping.GHSA-rvv3-g6hj-g44x ↗
BreakingUpgrade verdict
4 breaking changes and 5 security fixes.
In plain terms
- This release replaces 15.0.0 and undoes its changes: the AddAutoMapper overloads again treat finding maps and finding dependencies as separate steps, which cannot be combined.
- You now need a license key to use AutoMapper, set through the configuration.
- AutoMapper is no longer MIT licensed; it is now offered under a dual commercial and open-source license.
- If you create MapperConfiguration directly, you must now pass a logger factory; using services.AddAutoMapper supplies it automatically.
Must act Top 5 of 9 that need code or config changes
Target frameworks requirement changed in 15.1.3: net8.0 → .NETStandard2.0, net8.0, net9.0.
What you must change
Breaking4
Supersedes 15.0.0, reverting behavior and overloads so AddAutoMapper overloads separate map scanning from dependency scanning.
AddAutoMapperRequires a license key to be configured.
LicenseKeyMoves from the MIT license to a dual commercial/OSS license.
MapperConfiguration now requires an ILoggerFactory for logging.
MapperConfigurationILoggerFactoryMapperConfigurationExpressionservices.AddAutoMapperSecurity5
Fixes GHSA-rvv3-g6hj-g44x by defaulting MaxDepth to 64 for self-referential types, preventing uncontrolled recursion during mapping.
MaxDepthFixes uncontrolled recursion on cyclic or self-referential object graphs that could cause stack exhaustion and denial of service; users should upgrade.
Notes that applications processing untrusted or attacker-controlled object graphs through affected mapping paths may be impacted.
Recommends upgrading to this release to address the recursion vulnerability.
Bumps JsonWebTokens to address GHSA-8g4q-xg66-9fp4, fixing #4575.
JsonWebTokensAPI changes
Generated by DepDelta from published .NET assemblies. Not mixed with prose notes.
- changed:
ctor MapperConfiguration(Action<IMapperConfigurationExpression> configure) → ctor MapperConfiguration(Action<IMapperConfigurationExpression> configure, ILoggerFactory loggerFactory) - changed:
ctor MapperConfiguration(MapperConfigurationExpression configurationExpression) → ctor MapperConfiguration(MapperConfigurationExpression configurationExpression, ILoggerFactory loggerFactory) - added:
method MemberMap.CloseGenerics(TypeMap typeMap): IValueResolver - added:
property IMapperConfigurationExpression.LicenseKey: string { get; set; } - added:
property MapperConfigurationExpression.LicenseKey: string { get; set; } - added:
property MapperConfigurationExpression.ServiceLifetime: ServiceLifetime { get; set; } - added:
property MemberMap.ProjectToExpression: LambdaExpression { get; } - added:
property MemberMap.SourceMemberName: string { get; }
- added:
property PathConfigurationExpression.Ignored: bool { get; }
- added:
method ClassValueResolver.CloseGenerics(TypeMap typeMap): IValueResolver - added:
method ExpressionResolver.CloseGenerics(TypeMap typeMap): IValueResolver - added:
method FuncResolver.CloseGenerics(TypeMap typeMap): IValueResolver - added:
method ValueConverter.CloseGenerics(TypeMap typeMap): IValueResolver - added:
property ClassValueResolver.ProjectToExpression: LambdaExpression { get; } - added:
property ExpressionResolver.SourceMemberName: string { get; } - added:
property FuncResolver.ProjectToExpression: LambdaExpression { get; } - added:
property FuncResolver.SourceMemberName: string { get; } - added:
property MemberPathResolver.SourceMemberName: string { get; } - added:
property ValueConverter.ProjectToExpression: LambdaExpression { get; }
- added:
property IGlobalConfiguration.LicenseKey: string { get; }
- removed:
sealed class StringToEnumMapper implements IObjectMapper - changed:
method StringToEnumMapper.MapExpression(IGlobalConfiguration configuration, ProfileMap profileMap, MemberMap memberMap, Expression sourceExpression, Expression destExpression): Expression → method StringToEnumMapper.MapExpression(IGlobalConfiguration configurationProvider, ProfileMap profileMap, MemberMap memberMap, Expression sourceExpression, Expression destExpression): Expression - added:
class StringToEnumMapper implements IObjectMapper - added:
method AssignableMapper.GetAssociatedTypes(TypePair initialTypes): TypePair? - added:
method ConstructorMapper.GetAssociatedTypes(TypePair initialTypes): TypePair? - added:
method ConversionOperatorMapper.GetAssociatedTypes(TypePair initialTypes): TypePair? - added:
method ConvertMapper.GetAssociatedTypes(TypePair initialTypes): TypePair? - added:
method EnumToEnumMapper.GetAssociatedTypes(TypePair initialTypes): TypePair? - added:
method FromDynamicMapper.GetAssociatedTypes(TypePair initialTypes): TypePair? - added:
method FromStringDictionaryMapper.GetAssociatedTypes(TypePair initialTypes): TypePair? - added:
method KeyValueMapper.GetAssociatedTypes(TypePair initialTypes): TypePair? - added:
method ObjectMapper.GetAssociatedTypes(TypePair initialTypes): TypePair? - added:
method ParseStringMapper.GetAssociatedTypes(TypePair initialTypes): TypePair? - added:
method StringToEnumMapper.GetAssociatedTypes(TypePair initialTypes): TypePair? - added:
method ToDynamicMapper.GetAssociatedTypes(TypePair initialTypes): TypePair? - added:
method ToStringDictionaryMapper.GetAssociatedTypes(TypePair initialTypes): TypePair? - added:
method ToStringMapper.GetAssociatedTypes(TypePair initialTypes): TypePair? - added:
method UnderlyingTypeEnumMapper.GetAssociatedTypes(TypePair initialTypes): TypePair?
- removed:
static method ServiceCollectionExtensions.AddAutoMapper(IServiceCollection services, Assembly[] assemblies): IServiceCollection - removed:
static method ServiceCollectionExtensions.AddAutoMapper(IServiceCollection services, IEnumerable<Assembly> assemblies, ServiceLifetime serviceLifetime = …): IServiceCollection - removed:
static method ServiceCollectionExtensions.AddAutoMapper(IServiceCollection services, Type[] profileAssemblyMarkerTypes): IServiceCollection