1

Я использовал S # arp и обновил метод Generate в AutoPersistenceModelGenerator для работы с Fluent NHibernate 1.1. Я также изменил свое имя сборки из MyProject.Data в MyProject.Infrastructure и я не уверен, вызвавший проблему:Метод «Генерировать» в типе xxx не имеет реализации - S # arp - ОБНОВЛЕНО

public AutoPersistenceModel Generate() 
    { 
     return AutoMap.Assemblies(new myProjectMappingConfiguration(), 
            typeof (MyClass).Assembly) 
      .Conventions.Setup(GetConventions()) 
      .IgnoreBase<Entity>() 
      .IgnoreBase(typeof (EntityWithTypedId<>)) 
      .UseOverridesFromAssemblyOf<AutoPersistenceModelGenerator>(); 
    } 

В момент, Виндзорский замок регистрирует сборку, содержащую указанный выше способ ...

 container.Register(
      AllTypes.Pick() 
      .FromAssemblyNamed("MyProject.Infrastructure") 
      .WithService.FirstNonGenericCoreInterface("MyProject.Core")); 

... он бросает это исключение:

Метод 'Generate' в типе 'MyProject.Infrastructure.NHibernateMaps.AutoPersistenceModelGenerator' из сборки «MyProject.Infrastructure, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null 'не имеет реализации.

Я полностью очистил проект и перестроил его, но ошибка продолжает происходить.

Я не знаю, если это имеет значение, но описанный выше метод фактически вызывается непосредственно в Global.asax:

private void InitializeNHibernateSession() 
    { 
     var cfg = NHibernateSession.Init(
      webSessionStorage, 
      new string[] { Server.MapPath("~/bin/MyProject.Infrastructure.dll") }, 
      new AutoPersistenceModelGenerator().Generate(), 
      Server.MapPath("~/NHibernate.config")); 
    } 

Я попытался удалить регистрацию МОК, но та же ошибка, затем бросили на этот метод:

public void Initialize(Action initMethod) 
    { 
     if (!this.NHibernateSessionIsLoaded) 
     { 
      lock (syncLock) 
      { 
       if (!this.NHibernateSessionIsLoaded) 
       { 
        initMethod(); 
        this.NHibernateSessionIsLoaded = true; 
       } 
      } 
     } 
    } 

UPDATE

Я воссоздал свой проект и повторяет тот же процесс снова - ошибка возникает, когда я обновляю Fluent NHibernate от 1.0 до 1.1. Любые идеи почему?

+0

Вы уверены, что вы не загружаете более раннюю версию сборки - возможно, из GAC? См. Http://stackoverflow.com/questions/948785/typeloadexception-says-no-implementation-but-it-is-implemented – PatrickSteele

ответ

3

Я считаю, что это было вызвано частью сборщиков архитектуры S # arp, ссылающихся на старую версию Fluent NHibernate.

Я обновил сборки S # arp до 1.6 (теперь использует FNH 1.1), и теперь он работает.

2

Я столкнулся с этой же проблемой, но не готов обновить мою версию sharparch, также я использую версию 2.0.0.0 fluentnhibernate. Вы можете обойти это, используя перенаправление привязки сборки в своем app.config или web.config. Например:

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="FluentNhibernate" publicKeyToken="8aa435e3cb308880" culture="neutral"/> 
      <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="2.0.0.0"/> 
     </dependentAssembly> 
    </assemblyBinding> 
</runtime>