2010-11-17 7 views
5

y aquí está la excepción interna al final:una configuración no válida o incompleta mientras se crea una SessionFactory

no puede cargar el archivo o ensamblado 'ByteCode.Castle' o uno de sus dependencias. El sistema no puede encontrar el archivo especificado.

Estoy añadiendo todas las referencias de nhibernate, que se utiliza todo el construye aquí es mi código:

usando NHibernate; usando FluentNHibernate; usando NHibernate.Cfg; usando System.Reflection; usando FluentNHibernate.Cfg.Db; usando FluentNHibernate.Cfg; usando NHibernate.ByteCode.Castle; usando Castle.Core; usando Castle.DynamicProxy;

espacio de nombres _3adaseh { clase estática pública NHibernateHelper { privada ReferByteCode static void() { // sólo para asegurarse de la ByteCodeCastle se carga falsa ProxyFactory = new ProxyFactory(); }

#region Session 
    private static ISessionFactory _sessionFactory; 

    private static ISessionFactory SessionFactory 
    { 
     get 
     { 
      if (_sessionFactory == null) 
      { 
       ReferByteCode(); 
       var configuration = new Configuration(); 
       #region Configuring Fluent NHibernate 
       IPersistenceConfigurer persistenceConfigurer = MsSqlConfiguration.MsSql2008.ConnectionString("Data Source=.;Initial Catalog=3adaseh;Integrated Security=True").ShowSql().ProxyFactoryFactory("ByteCode.Castle.ProxyFactoryFactory, ByteCode.Castle"); 
       // 
       // initialize nhibernate with persistance configurer properties 
       //Configuration cfg = persistenceConfigurer.ConfigureProperties(new Configuration()); 
       //var persistenceModel = new PersistenceModel(); 
       //persistenceModel.AddMappingsFromAssembly(Assembly.Load("3adaseh.Mappings")); 
       //persistenceModel.Configure(cfg); 
       try 
       { 
        _sessionFactory = Fluently.Configure().Database(persistenceConfigurer).Mappings(m => m.FluentMappings.AddFromAssembly(Assembly.Load("3adaseh.Mappings"))).BuildSessionFactory(); 
       } 
       catch (System.Exception ex) 
       { 
        throw ex; 
       } 

       //cfg.SetProperty(
       // add mappings definition to nhibernate configuration 
       //try 
       //{ 
       // var persistenceModel = new PersistenceModel(); 
       // persistenceModel.AddMappingsFromAssembly(Assembly.Load("3adaseh.Mappings")); 
       // persistenceModel.Configure(cfg); 
       // _sessionFactory = configuration.BuildSessionFactory(); 
       //} 
       //catch (System.Exception ex) 
       //{ 
       // throw ex; 
       //} 
        #endregion 




      } 
      return _sessionFactory; 
     } 
    } 

    public static ISession OpenSession() 
    { 
     return SessionFactory.OpenSession(); 
    } 
    #endregion 

    #region CRUD Operations 
    public static void Add<T>(T newObject) 
    { 
     using (ISession session = NHibernateHelper.OpenSession()) 
     { 
      using (ITransaction transaction = session.BeginTransaction()) 
      { 
       session.Save(newObject); 
       transaction.Commit(); 
      } 
     } 
    } 


    public static void Update<T>(T updatedObject) 
    { 
     using (ISession session = NHibernateHelper.OpenSession()) 
     { 
      using (ITransaction transaction = session.BeginTransaction()) 
      { 
       session.Update(updatedObject); 
       transaction.Commit(); 
      } 
     } 
    } 

    public static void Remove<T>(T deletedObject) 
    { 
     using (ISession session = NHibernateHelper.OpenSession()) 
     { 
      using (ITransaction transaction = session.BeginTransaction()) 
      { 
       session.Delete(deletedObject); 
       transaction.Commit(); 
      } 
     } 
    } 

    public static T GetById<T>(int objectID) 
    { 
     using (ISession session = NHibernateHelper.OpenSession()) 
     { 
      using (ITransaction transaction = session.BeginTransaction()) 
      { 
       return session.Get<T>(objectID); 
      } 
     } 
    } 
    #endregion 
} 

}

no pude prueba de nada hasta ahora, realmente estoy aburriendo de este error, he añadido referencias NHibernate a todos mis bibliotecas de clases y nada se está fijo, ¿Alguien puede ayudar por favor? ?

Respuesta

2

Asegúrese de tener referencias de ensamblado a NHibernate.ByteCode.Castle.dll y Castle.Core.dll (y Castle.DynamicProxy2.dll si está utilizando NH2.1.2) * para asegurarse de que se copie en el directorio de salida. ¿Qué versión de Fluent NHibernate y NHibernate estás usando?

* Castle.DynamicProxy2.dll se ha fusionado con Castle.Core.dll. La versión fusionada más nueva de Castle.Core.dll se utiliza en NH3.

+0

Bien aquí está mi estructura allí Project.Mappings, Project. Entites, Project.UnitTesting, Project.Business, – user510336

+0

Estoy ejecutando esto en pruebas unitarias, nhibernate helper existe en los negocios, voy a la página web hibernate con fluidez, descargo y descargo fluent nhibernate y uso todos los dlls en el archivo descargado, aquí están las versiones i utilizado fluentnhibernate-binary-1.2.0.690 , fluentnhibernate-binary-1.2.0.691. Estoy agregando referencia a aquellos en casi todos mis proyectos, más iesi collections n log4net – user510336

+0

usando NHibernate; usando FluentNHibernate; usando NHibernate.Cfg; usando System.Reflection; usando FluentNHibernate.Cfg.Db; usando FluentNHibernate.Cfg; usando NHibernate.ByteCode.Castle; usando Castle.Core; usando Castle.DynamicProxy; , aquí está la parte que usa en el nhibernate helper por cierto, esto es lo que hago Tengo una carpeta externa llamada referencias y hago todas las referencias a través de esa carpeta, así que cuando descargo una nueva versión solo borro esta carpeta y pongo todas las referencias dentro de eso. – user510336

0

Sí, exactamente lo que dijo James. Como la fábrica de proxy solo está especificada en la configuración de NHibernate y no es utilizada realmente por ninguna de las bibliotecas de clase en una solución, no (siempre) se copia al proyecto de la aplicación en la compilación.

Lo que funciona para mí es solo hacer referencia al mínimo indispensable en todas las bibliotecas de clase, y luego hacer referencia a todos los bits adicionales directamente en el proyecto de la aplicación. El proyecto de aplicación me dirá qué es lo que falta cuando trato de ejecutarlo. Cosas como la fábrica de proxy (NHibernate.ByteCode.Castle, Castle.Core y Castle.DynamicProxy), la memoria secundaria (NHibernate.Caches.SysCache) y el análisis HQL (Antlr3.Runtime), etc. Solo sigue agregándolos como referencias en el proyecto de aplicación después de cada queja.

Editar

En el error que has enviado se queja de no encontrar 'ByteCode.Castle'. El ensamblado en cuestión es en realidad 'NHibernate.ByteCode.Castle'. El error puede estar en su App.config o Web.config donde definió la fábrica de proxy. ¿Escribió el nombre del ensamblado correctamente?

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory> 
     ... 
     <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property> 
     ... 
    </session-factory> 
</hibernate-configuration> 
+0

¿cómo puedo agregarlos como referencias para todo el proyecto? – user510336

+0

Estoy usando pruebas unitarias y no quiero tener ninguna configuración en app.config o web.config, pero estoy usando la biblioteca de clases (puedo agregar app.config allí?!?!?) – user510336

0

Bueno aquí era el problema, en mi código que estaba escribiendo

ProxyFactoryFactory ("ByteCode.Castle.ProxyFactoryFactory, ByteCode.Castle ");

sin la palabra nhibernate cuando leí nhibernate 2.1 eliminé esa palabra de las referencias por lo que estaba buscando bytecode.castle, y cuando estaba renombrando ese dll estaba haciendo una coincidencia y Estaba creando un gran lío por mi cuenta, ahora simplemente eliminé el nombre nhibernate y agregué referencias manualmente ..... y está trabajando manualmente, gracias a todos :)

Cuestiones relacionadas