2010-09-03 50 views
2

调用我的任何Mapper.Map方法时出现以下异常。AutoMapper/Castle - 覆盖成员时违反了继承安全规则

重写成员时违反了继承安全规则:'Castle.Core.Logging.LevelFilteredLogger.InitializeLifetimeService()'。 覆盖方法的安全性可访问性必须与要覆盖的方法的安全性可访问性相匹配 。

我使用的是在.NET 4.0(使用Castle.Core 1.2.0.6623版本)上运行的S#arp 1.6应用程序中从codeplex下载的AutoMapper的最新版本。

我相信它与我不太了解的新的.Net 4.0安全设置有关。

有没有办法解决它?

保罗

+1

你曾经尝试都合并和未合并AutoMapper组装?我遇到了合并后的问题 - 更改为未合并的固定(Automapper v2.0.0.200)。 – rmac 2010-09-26 14:07:49

+0

谢谢rmacfie ...为我解决了它。 – Daniel 2010-11-07 23:53:05

回答

1

我试图从东西一个小小的谷歌搜索固定我的问题,我不知道这是理想还是推荐的方法,但它的工作。

我已将此添加到Automapper项目“的AssemblyInfo.cs”文件:

[assembly: System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)] 

我重新编译和使用新的DLL,一切工作正常。

请留下评论,如果这不是reccomended或如果有更好的方法。

现在虽然我会留下我自己的答案作为正确的答案。

感谢您的帮助!

UPDATE:

我的映射是非常简单的,对不起所有的代码,但认为它可以帮助你:

初始化代码:

Mapper.Reset(); 
Mapper.Initialize(x => 
{ 
    x.AddProfile<LeadsProfile>(); 
    //x.AddProfile<AttendeeProfile>(); 
}); 

Mapper.AssertConfigurationIsValid(); 

LeadsProfile。CS

public class LeadsProfile : AutoMapper.Profile 
     { 
      public override string ProfileName 
      { 
       get { return "LeadsProfile"; } 
      } 

      protected override void Configure() 
      { 

       Mapper.CreateMap<Lead, LeadDto>(); 

       Mapper.CreateMap<Lead, LeadDetailDto>(); 

       Lead lead = null; 
       Mapper.CreateMap<int, LeadDetailDto>() 
        .BeforeMap((s, d) => lead = ServiceLocator.Current.GetInstance<ILeadRepository>().FindOne(s)) 
        .ForMember(d => d.Id, x => x.MapFrom(s => lead.Id)) 
        .ForMember(d => d.Fullname, x => x.MapFrom(s => lead.Fullname)) 
        .ForMember(d => d.TelNumber, x => x.MapFrom(s => lead.TelNumber)) 
        .ForMember(d => d.BookedAppointmentDate, x => x.MapFrom(s => lead.BookedAppointmentDate)); 

      } 

     } 

源类

public class Lead : Entity 
    { 
     public Lead() 
     { 
      Status = Common.LeadStatus.Raw; 
      CreatedDate = DateTime.Now; 
     } 

     public Lead(Branch branch, Promoter promoter, LeadSource source, string fullname, string telNumber, Address address, DateTime apptDate) : this() 
     { 
      this.Branch = branch; 
      this.Promoter = promoter; 
      this.Source = source; 
      this.Fullname = fullname; 
      this.TelNumber = telNumber; 
      this.Address = address; 
      this.BookedAppointmentDate = apptDate; 
     } 

     public virtual Branch Branch { get; set; } 
     public virtual Promoter Promoter { get; set; } 
     public virtual LeadSource Source { get; set; } 
     public virtual Common.LeadStatus Status { get; set; } 

     public virtual bool ExistingCustomer { get; set; } 
     public virtual bool IsDoso { get; set; } 

     public virtual string TitlePrefix { get; set; } 
     public virtual string Fullname { get; set; } 
     public virtual string TelNumber { get; set; } 
     public virtual string MobileNumber { get; set; } 

     public virtual DateTime BookedAppointmentDate { get; set; } 

     public virtual Address Address { get; set; } 

     public virtual Store Store { get; set; } 

     public virtual IList<LeadProduct> Products { get; set; } 
     public virtual IList<Appointment> Appointments { get; set; } 
     public virtual IList<Sale> Sales { get; set; } 

     public virtual DateTime CreatedDate { get; set; } 
    } 

目标DTO的

public class LeadDto 
    { 
     public int Id { get; set; } 
     public string Fullname { get; set; } 
     public string TelNumber { get; set; } 
     public DateTime BookedAppointmentDate { get; set; } 
    } 

public class LeadDetailDto 
    { 
     public int Id { get; set; } 
     public string Fullname { get; set; } 
     public string TelNumber { get; set; } 
     public DateTime BookedAppointmentDate { get; set; } 
    } 
+0

是否可以共享源/目标映射的示例?如果这是一个错误,我很乐意得到一个回归测试。 – 2010-09-07 12:38:25

+0

我已经用我的代码更新了我的答案,希望它有帮助...如果可以修复这个问题很好,所以我不必重新编译项目。 – 2010-09-07 17:02:26

+0

我在使用.NET 4的最新版本2.0.207中收到此错误。 – Schneider 2011-04-11 08:43:51

相关问题