2015-05-02 99 views
3

搞錯了,從我的項目有人在automapper寫簡介下面的句子:奇怪映射行爲布爾

Mapper.CreateMap<Appointment, AppointmentModel>() 
    .ForMember(x => x.DeclineStart, o => o.MapFrom(x => x.DeclineStart.ToString())) 

哪裏DeclineStart是實體和模型類的屬性。

public class Appointment 
{ 
    public bool DeclineStart { get; set; } 
} 

public class AppointmentModel 
{ 
    public bool DeclineStart { get; set; } 
} 

我知道在這種情況下,沒有必要爲此屬性創建任何映射規則。

令我吃驚的是這個映射(從StringBoolean)正在工作。

但是,當我們發表我們的Azure雲服務應用程序,該代碼成爲扔AutoMapperMappingException這表明:

Missing type map configuration or unsupported mapping. 
Mapping types:String -> Boolean (System.String -> System.Boolean) 
Destination path: AppointmentModel.DeclineStartBackfill.DeclineStartBackfill 
Source value:False 

如何它可能是相同的代碼在本地工作,但沒有工作在Azure上?

在此先感謝!


Azure的機器配置:在Windows Server 2012 R2/.NET框架4.5.1

本地機器配置:Windows 7中/ .NET框架4.5.2

Automapper版本:3.1.0

回答

1

是否所有的AutoMapper程序集都已部署,包括AutoMapper.Net4.dll程序集?該額外的程序集在.NET 4中提供了其他地方無法使用的擴展,包括類型轉換器。

你有兩個選擇:手動引用.NET4.dll總成裏面的東西:

public static class LinkerHelper { 
    public static object BecauseAzureDeploymentsAreDumb() { 
     var foo = typeof(HashSetMapper); 
     return foo; 
    } 
} 

或升級到AutoMapper,在那裏我已經結合特定於平臺的組件的最新測試版。

+0

嗯,沒有。但爲什麼發生 - 我無法理解。 –

+0

我所有的依賴關係都是由Nuget加載的(對於automapper它是:)。並且在我的開發機器上本地加載此程序集(AutoMapper.Net4.dll),但在Azure虛擬機上 - 不是。實際上只有一個AutoMapper.dll存在。 –

+1

所以,如果你更新到預發佈,這將消失。這是因爲沒有引用.Net4.dll程序集中的類型的代碼,並且即使您引用它,部署者也會認爲「嗯,沒有使用它,所以我不會部署」。這很愚蠢,我通過製作1個程序集來修復4.0版本的問題。 –