我正在托管一个使用AutoMapper将某些类转换为其他类的应用程序.这一直很好,直到今天.该申请已被托管约3个月.在我们之间已经完成了几个部署,其中应用程序已重新启动,但IIS没有.
从不知道应用程序开始失败,回顾我们发现这是原因的日志:
System.NullReferenceException: Object reference not set to an instance of an object.
at AutoMapper.Configuration.<>c__DisplayClass13.<FindExplicitlyDefinedTypeMap>b__12(TypeMap x)
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)
at AutoMapper.Configuration.FindExplicitlyDefinedTypeMap(Type sourceType, Type destinationType)
at AutoMapper.Configuration.CreateTypeMap(Type source, Type destination, String profileName)
at AutoMapper.Configuration.CreateMap[TSource,TDestination](String profileName)
at AutoMapper.Configuration.CreateMap[TSource,TDestination]()
at AutoMapper.Mapper.CreateMap[TSource,TDestination]()
Run Code Online (Sandbox Code Playgroud)
所以我们切换到我们的备份服务器,它根本没有这个问题.我们尝试通过重新启动应用程序来解决问题,但没有帮助.只有重新启动IIS修复了该问题.
我们尝试查看源代码以找出导致此问题的原因,我们在https://github.com/jbogard/AutoMapper/上下载了该问题.异常似乎是在AutoMapper的ConfigurationStore类的此方法中引起的.
private TypeMap FindExplicitlyDefinedTypeMap(Type sourceType, Type destinationType)
{
return _typeMaps.FirstOrDefault(x => x.DestinationType == destinationType && x.SourceType == sourceType);
}
Run Code Online (Sandbox Code Playgroud)
_typeMaps在类中定义如下.
private readonly IList<TypeMap> _typeMaps = new List<TypeMap>();
Run Code Online (Sandbox Code Playgroud)
如果我们检查TypeMap,我们会看到x.DestionationType和x.SourceType引用其他属性:
private readonly TypeInfo _destinationType;
private readonly TypeInfo _sourceType;
public …Run Code Online (Sandbox Code Playgroud)