NHibernate MappingException: no se pudo compilar el documento de mapeo
deployment nhibernate-mapping (2)
Compruebe que el archivo .hbm.xml esté definido como un recurso incrustado en su proyecto.
En mi aplicación web de desarrollo NHibernate funciona de maravilla. Cuando precompilo y despliegue el sitio, obtengo una MappingException cuando se crea SessionFactory.
Aquí hay algo de información del rastro:
NHibernate.Cfg.Environment 2010-07-15 09: 20: 59,577 [7] INFORMACIÓN NHibernate.Cfg.Environment [(null)] - NHibernate 2.1.2.4000 (2.1.2.4000) 0.452436832055471 0.232383 NHibernate.Cfg.Environment 2010-07- 15 09: 20: 59,718 [7] INFO NHibernate.Cfg.Environment [(null)] - Nombre del proveedor del código de bytes: lcg 0.522780409241957 0.070344 NHibernate.Cfg.Environment 2010-07-15 09: 20: 59,734 [7] INFO NHibernate.Cfg .Environment [(null)] - Using reflection optimizer 0.529107470362853 0.006327 NHibernate.Cfg.Configuration 2010-07-15 09: 20: 59,827 [7] INFO NHibernate.Cfg.Configuration [(null)] - Recurso de asignación: Kctc.BusinessLayer. Mappings.StoredWill.hbm.xml 0.623336485503046 0.094229 NHibernate.Dialect.Dialect 2010-07-15 09: 21: 00,109 [7] INFORMACIÓN NHibernate.Dialect.Dialect [(null)] - Uso del dialecto: NHibernate.Dialect.MsSql2008Dialect 0.91570185596214 0.292365 NHibernate .Cfg.Configuration 2010-07-15 09: 21: 01,390 [7] ERROR NHibernate.Cfg.Configuration [(null)] - No se pudo compilar el documento de mapeo: Kctc.BusinessLayer.Map pings.StoredWill.hbm.xml NHibernate.MappingException: no se pudo compilar el documento de correlación: Kctc.BusinessLayer.Mappings.StoredWill.hbm.xml ---> System.InvalidOperationException: no se puede generar una clase temporal (resultado = 1). error CS2001: No se pudo encontrar el archivo de origen ''C: / WINDOWS / TEMP / shp2uoc8.0.cs'' error CS2008: No se especificó ninguna entrada
en System.Xml.Serialization.Compiler.Compile (Assembly parent, String ns, XmlSerializerCompilerParameters xmlParameters, Evidence evidence) en System.Xml.Serialization.TempAssembly.GenerateAssembly (XmlMapping [] xmlMappings, Type [] types, String defaultNamespace, Evidence evidence, Parámetros de XmlSerializerCompilerParameters, conjunto de ensamblaje, ensamblajes Hashtable) en System.Xml.Serialization.TempAssembly..ctor (XmlMapping [] xmlMappings, Type [] types, String defaultNamespace, String location, Evidence evidence) en System.Xml.Serialization.XmlSerializer.GenerateTempAssembly (XmlMapping xmlMapping, Type type, String defaultNamespace) en System.Xml.Serialization.XmlSerializer..ctor (Type type, String defaultNamespace) en System.Xml.Serialization.XmlSerializer..ctor (Type type) en NHibernate.Cfg.XmlHbmBinding. Binder.Deserialize [T] (nodo XmlNode) en NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.Bind (nodo XmlNode) en NHibernate.Cfg.Configuration.AddValidatedDocument (NamedXmlDocument doc) --- End o f traza de la pila de excepción interna --- 2.20609881982207 1.290397 Error de ejecución no controlada No se pudo compilar el documento de mapeo: Kctc.BusinessLayer.Mappings.StoredWill.hbm.xml en NHibernate.Cfg.Configuration.LogAndThrow (excepción de excepción) en NHibernate.Cfg.Configuration. AddValidatedDocument (NamedXmlDocument doc) en NHibernate.Cfg.Configuration.ProcessMappingsQueue () en NHibernate.Cfg.Configuration.AddDocumentThroughQueue (documento NamedXmlDocument) en NHibernate.Cfg.Configuration.AddXmlReader (XmlReader hbmReader, String name) en NHibernate.Cfg.Configuration.AddInputStream (Stream xmlInputStream, String name) en NHibernate.Cfg.Configuration.AddResource (String path, Assembly assembly) en NHibernate.Cfg.Configuration.AddAssembly (Assembly assembly) en Kctc.BusinessLayer.NHibernateSessionFactory.get_SessionFactory () en C: / Kctc / Trunk / Kctc.BusinessLayer / NHibernateSessionFactory.cs: línea 26
en Kctc.BusinessLayer.NHibernateSessionFactory.OpenSession () en C: / Kctc / Trunk / Kctc.BusinessLayer / NHibernateSessionFactory.cs: línea 39
en Developers_Test.ListSquirps (Object Sender, EventArgs e) en System.Web.UI.WebControls.Button.OnClick (EventArgs e) en System.Web.UI.WebControls.Button.RaisePostBackEvent (String eventArgument) en System.Web.UI. WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent (String eventArgument) en System.Web.UI.Page.RaisePostBackEvent (IPostBackEventHventler sourceControl, String eventArgument) en System.Web.UI.Page.RaisePostBackEvent (NameValueCollection postData)
en System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 2.20665643259129 0.000558
Esto me sugiere que el archivo de asignación tiene un error o no se pudo encontrar. Pero si la aplicación de desarrollo funciona bien, ¿cómo puede haber un problema con el archivo de asignación cuando se precompila e implementa?
¿Alguien tiene alguna sugerencia sobre lo que podría estar pasando aquí?
Gracias
De acuerdo, lo tengo. La clase XmlSerializer que se invoca durante la creación de SessionFactory necesita acceso de escritura a (de forma predeterminada) C: / Windows / TEMP para que pueda generar algunas cosas y ajustarlas allí.
Alternativamente, puede seguir el truco en este blog http://www.hanselman.com/blog/ChangingWhereXmlSerializerOutputsTemporaryAssemblies.aspx . Esto cambia la ubicación predeterminada que XmlSerializer almacena su shiznit. Todo lo que tiene que hacer es agregar el siguiente elemento dentro del elemento de configuración de su archivo web.config / app.config:
<system.xml.serialization>
<xmlSerializer tempFilesLocation="C:/SomeFolder/SomeOtherFolder/WhereeverYouWant"/>
</system.xml.serialization>
La primera solución se siente como un problema de seguridad, y la segunda se siente como un truco torpe con consecuencias difíciles de prever.
¿Por qué está tan mal documentado?