Xamarin iOS 链接器导致 AutoMapper 问题
Xamarin iOS Linker causing AutoMapper issues
我正在处理一个使用 AutoMapper 的 Xamarin 项目。当链接设置为“Link Framework SDKs Only”时,我在初始化地图时收到以下错误
System.ArgumentNullException: Value cannot be null. Parameter name:
method
例外情况不多,调用堆栈也不多
AutoMapper.Mappers.ConvertMapper.MapExpression
AutoMapper.Execution.TypeMapPlanBuilder.ObjectMapperExpression
AutoMapper.Execution.TypeMapPlanBuilder.MapExpression
AutoMapper.Mappers.NullableSourceMapper.MapExpression
AutoMapper.Execution.TypeMapPlanBuilder.ObjectMapperExpression
AutoMapper.Execution.TypeMapPlanBuilder.MapExpression
AutoMapper.Execution.TypeMapPlanBuilder.MapExpression
AutoMapper.Execution.TypeMapPlanBuilder.CreatePropertyMapFunc
AutoMapper.Execution.TypeMapPlanBuilder.CreatePropertyMapFunc
AutoMapper.Execution.TypeMapPlanBuilder.TryPropertyMap
AutoMapper.Execution.TypeMapPlanBuilder.CreateAssignmentFunc
AutoMapper.Execution.TypeMapPlanBuilder.CreateMapperLambda
AutoMapper.TypeMap.Seal AutoMapper.MapperConfiguration.Seal
AutoMapper.MapperConfiguration..ctor
AutoMapper.MapperConfiguration..ctor AutoMapper.Mapper.Initialize
初步阅读表明 Linker 只是从我们正在使用的 class 中删除了一些属性或方法。
然而,在注释掉大部分映射然后一次重新引入它们之后,我发现这个 class 当前导致错误。
[Preserve]
internal class ItemBase : CareRecordItemBase
{
[Preserve]
public string Topic { get; set; }
[Preserve]
public string InPractice { get; set; }
[Preserve]
public string PrivateVal { get; set; }
}
如果我注释掉 InPractice
属性,则不会抛出异常。这对我来说毫无意义。谁能解释为什么这可能是个问题?
是否有更好的方法来诊断这些问题?
请参阅 AutoMapper 作者 Lucian Bargaoanu 的评论。我需要包含一个 xml 文件,用于将配置添加到链接过程。
Lucian 指的是这个 Automapper 问题,https://github.com/AutoMapper/AutoMapper/issues/2272
另见
根据帕特的回答:
- 添加一个XML文件
LinkDescription.xml
,你可以随意命名它。
- 添加此代码:
<linker>
<assembly fullname="mscorlib">
<type fullname="System.Convert" preserve="All" />
</assembly>
</linker>
- 将文件的构建操作设置为
LinkDescription
我正在处理一个使用 AutoMapper 的 Xamarin 项目。当链接设置为“Link Framework SDKs Only”时,我在初始化地图时收到以下错误
System.ArgumentNullException: Value cannot be null. Parameter name: method
例外情况不多,调用堆栈也不多
AutoMapper.Mappers.ConvertMapper.MapExpression
AutoMapper.Execution.TypeMapPlanBuilder.ObjectMapperExpression
AutoMapper.Execution.TypeMapPlanBuilder.MapExpression
AutoMapper.Mappers.NullableSourceMapper.MapExpression
AutoMapper.Execution.TypeMapPlanBuilder.ObjectMapperExpression
AutoMapper.Execution.TypeMapPlanBuilder.MapExpression
AutoMapper.Execution.TypeMapPlanBuilder.MapExpression
AutoMapper.Execution.TypeMapPlanBuilder.CreatePropertyMapFunc
AutoMapper.Execution.TypeMapPlanBuilder.CreatePropertyMapFunc
AutoMapper.Execution.TypeMapPlanBuilder.TryPropertyMap
AutoMapper.Execution.TypeMapPlanBuilder.CreateAssignmentFunc
AutoMapper.Execution.TypeMapPlanBuilder.CreateMapperLambda
AutoMapper.TypeMap.Seal AutoMapper.MapperConfiguration.Seal
AutoMapper.MapperConfiguration..ctor
AutoMapper.MapperConfiguration..ctor AutoMapper.Mapper.Initialize
初步阅读表明 Linker 只是从我们正在使用的 class 中删除了一些属性或方法。
然而,在注释掉大部分映射然后一次重新引入它们之后,我发现这个 class 当前导致错误。
[Preserve]
internal class ItemBase : CareRecordItemBase
{
[Preserve]
public string Topic { get; set; }
[Preserve]
public string InPractice { get; set; }
[Preserve]
public string PrivateVal { get; set; }
}
如果我注释掉 InPractice
属性,则不会抛出异常。这对我来说毫无意义。谁能解释为什么这可能是个问题?
是否有更好的方法来诊断这些问题?
请参阅 AutoMapper 作者 Lucian Bargaoanu 的评论。我需要包含一个 xml 文件,用于将配置添加到链接过程。
Lucian 指的是这个 Automapper 问题,https://github.com/AutoMapper/AutoMapper/issues/2272
另见
根据帕特的回答:
- 添加一个XML文件
LinkDescription.xml
,你可以随意命名它。 - 添加此代码:
<linker>
<assembly fullname="mscorlib">
<type fullname="System.Convert" preserve="All" />
</assembly>
</linker>
- 将文件的构建操作设置为
LinkDescription