dotnet7.0 ObjectMapper.Map violates the constraint of type 'T'
Is there an existing issue for this?
- [X] I have searched the existing issues
Description
ObjectMapper.Map 报错
Reproduction Steps
1.创建3个基类 public class UnifyPageResultDto<T> { public PageInfoOutput Pagination { get; set; }
public List<T> List { get; set; }
public UnifyPageResultDto()
{
}
public UnifyPageResultDto(List<T> list, int pageIndex, int pageSize, int total)
{
List = list;
Pagination = Pagination ?? new PageInfoOutput();
Pagination.PageIndex = pageIndex;
Pagination.PageSize = pageSize;
Pagination.Total = total;
}
}
public class IFullAuditedBasicDto
{
///
/// <summary>
/// 创建时间
/// </summary>
public string CreateTime { get; set; }
/// <summary>
/// 修改人id
/// </summary>
public string UpdateUserId { get; set; }
/// <summary>
/// 修改时间
/// </summary>
public string UpdateTime { get; set; }
}
public class IFullAuditedBasicDto
{
///
/// <summary>
/// 创建时间
/// </summary>
public string CreateTime { get; set; }
/// <summary>
/// 修改人id
/// </summary>
public string UpdateUserId { get; set; }
/// <summary>
/// 修改时间
/// </summary>
public string UpdateTime { get; set; }
}
-
创建两个映射类 public class GetAirCompanyCargoOutputVO : IFullAuditedBasicVO { ///
/// id /// public int Id { get; set; }///<summary> /// 航司id ///</summary> public int AirCompanyId { get; set; } /// <summary> /// 航司代码 /// </summary> public string AirCompanyCode { get; set; } /// <summary> /// 航司英文名 /// </summary> public string AirCompanyEnName { get; set; } ///<summary> /// 起运港,空港id ///</summary> public int AirportId { get; set; } /// <summary> /// 港口代码 /// </summary> public string AirportCode { get; set; } /// <summary> /// 港口中文名 /// </summary> public string AirportCnName { get; set; } ///<summary> /// 所属货站id ///</summary> public int CargoId { get; set; } /// <summary> /// 货站中文名 /// </summary> public string CargoCnName { get; set; } /// <summary> /// 货站英文名 /// </summary> public string CargoEnName { get; set; } ///<summary> /// 客/货机,t_enum_value_info表Property=’PlaneType‘;1客机,2货机,3客/货机 ///</summary> public string Type { get; set; } ///<summary> /// 是否直飞 ///</summary> public byte? IsDirect { get; set; }} public class GetAirCompanyCargoOutput : IFullAuditedBasicDto { ///
/// id /// public int Id { get; set; }///<summary> /// 航司id ///</summary> public int AirCompanyId { get; set; } /// <summary> /// 航司代码 /// </summary> public string AirCompanyCode { get; set; } /// <summary> /// 航司英文名 /// </summary> public string AirCompanyEnName { get; set; } ///<summary> /// 起运港,空港id ///</summary> public int AirportId { get; set; } /// <summary> /// 港口代码 /// </summary> public string AirportCode { get; set; } /// <summary> /// 港口中文名 /// </summary> public string AirportCnName { get; set; } ///<summary> /// 所属货站id ///</summary> public int CargoId { get; set; } /// <summary> /// 货站中文名 /// </summary> public string CargoCnName { get; set; } /// <summary> /// 货站英文名 /// </summary> public string CargoEnName { get; set; } ///<summary> /// 客/货机,t_enum_value_info表Property=’PlaneType‘;1客机,2货机,3客/货机 ///</summary> //public string Type { get; set; } /// <summary> /// 客/货机描述 /// </summary> public string TypeDisp { get; set; } ///<summary> /// 是否直飞 ///</summary> public byte? IsDirect { get; set; }}
-
开始映射 var dataStr = Newtonsoft.Json.JsonConvert.DeserializeObject<UnifyPageResultDto<GetAirCompanyCargoOutputVO>>(""" { "Pagination":{ "PageIndex":1,"PageSize":10,"Total":616},"List":[{ "Id":3721,"AirCompanyId":2125,"AirCompanyCode":"VI","AirCompanyEnName":"Volga-Dnepr Airline Joint Stock","AirportId":569,"AirportCode":"SZX","AirportCnName":"深圳宝安","CargoId":75,"CargoCnName":"国际货站","CargoEnName":"国际货站NB","Type":"3","IsDirect":3,"CreateUserId":0,"CreateTime":"2022-09-23T18:15:00","UpdateUserId":0,"UpdateTime":null},{ "Id":3718,"AirCompanyId":924,"AirCompanyCode":"Y8","AirCompanyEnName":"YANGTZE RIVER EXPRESS","AirportId":112,"AirportCode":"CAN","AirportCnName":"广州白云机场","CargoId":5,"CargoCnName":"货站3","CargoEnName":"one","Type":"3","IsDirect":3,"CreateUserId":0,"CreateTime":"2022-08-29T17:33:00","UpdateUserId":0,"UpdateTime":null},{ "Id":3716,"AirCompanyId":1016,"AirCompanyCode":"GI","AirCompanyEnName":"China Central Longhao Airlines Co., Ltd.","AirportId":112,"AirportCode":"CAN","AirportCnName":"广州白云机场","CargoId":5,"CargoCnName":"货站3","CargoEnName":"one","Type":"3","IsDirect":3,"CreateUserId":0,"CreateTime":"2022-07-05T16:53:00","UpdateUserId":0,"UpdateTime":null},{ "Id":3715,"AirCompanyId":969,"AirCompanyCode":"GG","AirCompanyEnName":"Sky Lease I, Inc.","AirportId":628,"AirportCode":"WUH","AirportCnName":"武汉天河机场","CargoId":67,"CargoCnName":"武汉天河机场国际货站","CargoEnName":"Wuhan Tianhe International Airport","Type":"2","IsDirect":3,"CreateUserId":0,"CreateTime":"2022-06-30T22:41:00","UpdateUserId":0,"UpdateTime":null},{ "Id":3714,"AirCompanyId":954,"AirCompanyCode":"K4","AirCompanyEnName":"KALITTA AIR LLC","AirportId":418,"AirportCode":"NGB","AirportCnName":"宁波栎社机场","CargoId":75,"CargoCnName":"国际货站","CargoEnName":"国际货站NB","Type":"2","IsDirect":1,"CreateUserId":0,"CreateTime":"2022-06-30T22:40:00","UpdateUserId":0,"UpdateTime":null},{ "Id":3712,"AirCompanyId":954,"AirCompanyCode":"K4","AirCompanyEnName":"KALITTA AIR LLC","AirportId":260,"AirportCode":"HFE","AirportCnName":"合肥骆岗机场","CargoId":72,"CargoCnName":"HFE货站","CargoEnName":"HFE ","Type":"2","IsDirect":1,"CreateUserId":0,"CreateTime":"2022-06-30T22:38:00","UpdateUserId":0,"UpdateTime":null},{ "Id":3713,"AirCompanyId":954,"AirCompanyCode":"K4","AirCompanyEnName":"KALITTA AIR LLC","AirportId":123,"AirportCode":"CGO","AirportCnName":"郑州新郑机场","CargoId":56,"CargoCnName":"郑州机场国际西货站","CargoEnName":"Xinzheng Airport International West Cargo Station","Type":"2","IsDirect":1,"CreateUserId":0,"CreateTime":"2022-06-30T22:38:00","UpdateUserId":0,"UpdateTime":null},{ "Id":3711,"AirCompanyId":954,"AirCompanyCode":"K4","AirCompanyEnName":"KALITTA AIR LLC","AirportId":149,"AirportCode":"CSX","AirportCnName":"长沙黄花机场","CargoId":22,"CargoCnName":"长沙黄花机场","CargoEnName":"CSX","Type":"2","IsDirect":1,"CreateUserId":0,"CreateTime":"2022-06-30T22:37:00","UpdateUserId":0,"UpdateTime":null},{ "Id":3710,"AirCompanyId":960,"AirCompanyCode":"GS","AirCompanyEnName":"TIANJING AIRLINE","AirportId":123,"AirportCode":"CGO","AirportCnName":"郑州新郑机场","CargoId":56,"CargoCnName":"郑州机场国际西货站","CargoEnName":"Xinzheng Airport International West Cargo Station","Type":"1","IsDirect":1,"CreateUserId":0,"CreateTime":"2022-06-30T09:17:00","UpdateUserId":0,"UpdateTime":null},{ "Id":3709,"AirCompanyId":315,"AirCompanyCode":"ET","AirCompanyEnName":"Ethiopian Airlines","AirportId":123,"AirportCode":"CGO","AirportCnName":"郑州新郑机场","CargoId":56,"CargoCnName":"郑州机场国际西货站","CargoEnName":"Xinzheng Airport International West Cargo Station","Type":"2","IsDirect":1,"CreateUserId":0,"CreateTime":"2022-06-30T09:16:00","UpdateUserId":0,"UpdateTime":null}]} """);
var result = ObjectMapper.Map<UnifyPageResultDto<GetAirCompanyCargoOutputVO>, UnifyPageResultDto<GetAirCompanyCargoOutput>>(dataStr);
Expected behavior
完成转换
Actual behavior
报错:Autofac.Core.DependencyResolutionException: An exception was thrown while activating Volo.Abp.ObjectMapping.DefaultObjectMapper -> Volo.Abp.AutoMapper.AutoMapperAutoObjectMappingProvider -> λ:Volo.Abp.AutoMapper.IMapperAccessor -> λ:Volo.Abp.AutoMapper.MapperAccessor.
---> System.ArgumentException: GenericArguments[0], 'System.Char', on 'T MaxFloatT' violates the constraint of type 'T'.
---> System.Security.VerificationException: Method System.Linq.Enumerable.MaxFloat: type argument 'System.Char' violates the constraint of type parameter 'T'.
at System.RuntimeMethodHandle.GetStubIfNeeded(RuntimeMethodHandleInternal method, RuntimeType declaringType, RuntimeType[] methodInstantiation)
at System.Reflection.RuntimeMethodInfo.MakeGenericMethod(Type[] methodInstantiation)
--- End of inner exception stack trace ---
at System.RuntimeType.ValidateGenericArguments(MemberInfo definition, RuntimeType[] genericArguments, Exception e)
at System.Reflection.RuntimeMethodInfo.MakeGenericMethod(Type[] methodInstantiation)
at AutoMapper.Internal.TypeDetails.<>c__DisplayClass25_1.<GetPublicNoArgExtensionMethods>b__10(MethodInfo extensionMethod)
at System.Linq.Enumerable.WhereSelectArrayIterator2.MoveNext() at System.Linq.Enumerable.ConcatIterator1.MoveNext()
at System.Linq.Enumerable.SelectManyIterator[TSource,TCollection,TResult](IEnumerable1 source, Func2 collectionSelector, Func3 resultSelector)+MoveNext() at System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext()
at System.Linq.Enumerable.UnionIterator1.GetNext() at System.Linq.Enumerable.UnionIterator1.MoveNext()
at System.Linq.Enumerable.ConcatIterator1.MoveNext() at AutoMapper.Internal.TypeDetails.PossibleNames() at AutoMapper.Internal.TypeDetails.GetMember(String name) at AutoMapper.Configuration.Conventions.DefaultName.GetMatchingMemberInfo(TypeDetails sourceTypeDetails, Type destType, Type destMemberType, String nameToSearch) at AutoMapper.Configuration.Conventions.ParentSourceToDestinationNameMapper.GetMatchingMemberInfo(TypeDetails sourceTypeDetails, Type destType, Type destMemberType, String nameToSearch) at AutoMapper.Configuration.Conventions.DefaultMember.MapDestinationPropertyToSource(ProfileMap options, TypeDetails sourceTypeDetails, Type destType, Type destMemberType, String nameToSearch, List1 resolvers, IMemberConfiguration parent, Boolean isReverseMap)
at AutoMapper.Configuration.Conventions.MemberConfiguration.MapDestinationPropertyToSource(ProfileMap options, TypeDetails sourceType, Type destType, Type destMemberType, String nameToSearch, List1 resolvers, Boolean isReverseMap) at AutoMapper.Configuration.Conventions.NameSplitMember.MapDestinationPropertyToSource(ProfileMap options, TypeDetails sourceType, Type destType, Type destMemberType, String nameToSearch, List1 resolvers, IMemberConfiguration parent, Boolean isReverseMap)
at AutoMapper.Configuration.Conventions.MemberConfiguration.MapDestinationPropertyToSource(ProfileMap options, TypeDetails sourceType, Type destType, Type destMemberType, String nameToSearch, List1 resolvers, Boolean isReverseMap) at AutoMapper.ProfileMap.MapDestinationPropertyToSource(TypeDetails sourceTypeDetails, Type destType, Type destMemberType, String destMemberName, List1 members, Boolean reverseNamingConventions)
at AutoMapper.TypeMap..ctor(Type sourceType, Type destinationType, ProfileMap profile, Boolean isReverseMap)
at AutoMapper.ProfileMap.BuildTypeMap(IGlobalConfiguration configurationProvider, ITypeMapConfiguration config)
at AutoMapper.ProfileMap.Register(IGlobalConfiguration configurationProvider)
at AutoMapper.MapperConfiguration.Seal()
at AutoMapper.MapperConfiguration..ctor(MapperConfigurationExpression configurationExpression)
at AutoMapper.MapperConfiguration..ctor(Action1 configure) at Volo.Abp.AutoMapper.AbpAutoMapperModule.CreateMappings(IServiceProvider serviceProvider) at Autofac.Extensions.DependencyInjection.AutofacRegistration.<>c__DisplayClass3_0.<Register>b__0(IComponentContext context, IEnumerable1 parameters)
at Autofac.Core.Activators.Delegate.DelegateActivator.ActivateInstance(IComponentContext context, IEnumerable1 parameters) at Autofac.Core.Activators.Delegate.DelegateActivator.<ConfigurePipeline>b__2_0(ResolveRequestContext ctxt, Action1 next)
at Autofac.Core.Resolving.Middleware.DelegateMiddleware.Execute(ResolveRequestContext context, Action1 next) at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt) at Autofac.Core.Resolving.Middleware.DisposalTrackingMiddleware.Execute(ResolveRequestContext context, Action1 next)
at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)
at Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action1 next) --- End of inner exception stack trace --- at Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action1 next)
at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)
at Autofac.Core.Pipeline.ResolvePipeline.Invoke(ResolveRequestContext ctxt)
at Autofac.Core.Resolving.Middleware.RegistrationPipelineInvokeMiddleware.Execute(ResolveRequestContext context, Action1 next) at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt) at Autofac.Core.Resolving.Middleware.SharingMiddleware.Execute(ResolveRequestContext context, Action1 next)
at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)
at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)
at Autofac.Core.Resolving.Middleware.CircularDependencyDetectorMiddleware.Execute(ResolveRequestContext context, Action1 next) at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt) at Autofac.Core.Pipeline.ResolvePipeline.Invoke(ResolveRequestContext ctxt) at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, ResolveRequest request) at Autofac.Core.Resolving.ResolveOperation.ExecuteOperation(ResolveRequest request) at Autofac.Core.Resolving.ResolveOperation.Execute(ResolveRequest request) at Autofac.Core.Lifetime.LifetimeScope.ResolveComponent(ResolveRequest request) at Autofac.ResolutionExtensions.TryResolveService(IComponentContext context, Service service, IEnumerable1 parameters, Object& instance)
at Autofac.ResolutionExtensions.ResolveService(IComponentContext context, Service service, IEnumerable1 parameters) at Autofac.ResolutionExtensions.Resolve(IComponentContext context, Type serviceType, IEnumerable1 parameters)
at Autofac.ResolutionExtensions.Resolve(IComponentContext context, Type serviceType)
at Autofac.Extensions.DependencyInjection.AutofacServiceProvider.GetRequiredService(Type serviceType)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
at Volo.Abp.Application.Services.ApplicationService.<get_ObjectMapper>b__24_0(IServiceProvider provider)
at Volo.Abp.DependencyInjection.AbpLazyServiceProvider.<>c__DisplayClass8_0.<LazyGetService>b__1()
at System.Lazy1.ViaFactory(LazyThreadSafetyMode mode) at System.Lazy1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
at System.Lazy1.CreateValue() at Volo.Abp.DependencyInjection.AbpLazyServiceProvider.LazyGetService(Type serviceType, Func2 factory)
at Volo.Abp.DependencyInjection.AbpLazyServiceProvider.LazyGetService[T](Func`2 factory)
at Volo.Abp.Application.Services.ApplicationService.get_ObjectMapper()
at SJZY.MasterData.Application.Services.AirCompanyCargo.AirCompanyCargoService.GetAirCompanyCargoList(GetAirCompanyCargoInputVO input) in D:\Code\SJZY\SJZY.MasterData.Api\src\SJZY.MasterData.Application\Services\AirCompanyCargo\AirCompanyCargoService.cs:line 58
at lambda_method1198(Closure, Object)
at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.AwaitableObjectResultExecutor.Execute(ActionContext actionContext, IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Logged|12_1(ControllerActionInvoker invoker)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
--- End of stack trace from previous location ---
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextExceptionFilterAsync>g__Awaited|26_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
Regression?
其他版本一切正常,只有dotnet7.0 + abp 6.0.1 时才有问题,dotnet6.0 + abp6.0.1也是正常
Known Workarounds
No response
Version
6.0.1
User Interface
Common (Default)
Database Provider
EF Core (Default)
Tiered or separate authentication server
None (Default)
Operation System
Windows (Default)
Other information
No response
hi
Please try to reproduce the problem with minimum code, Thanks
Possibly related to these reasons, you can fix this by setting the AutoMapper version of the project to 12.0
https://github.com/AutoMapper/AutoMapper/issues/3988
https://github.com/AutoMapper/AutoMapper/pull/3999
We have upgraded to 12. https://github.com/abpframework/abp/pull/13626/commits/cf3d090c4f3ce2785d1e3256b6b02afe53a794aa