NHibernate MappingException:无法编译映射文档

时间:2010-07-15 08:41:07

标签: nhibernate exception deployment nhibernate-mapping

在我的开发网络应用程序上,NHibernate正在使用花花公子。当我预编译和部署站点时,我在创建SessionFactory时得到MappingException。

以下是跟踪中的一些信息:

  

NHibernate.Cfg.Environment 2010-07-15 09:20:59,577 [7] INFO   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)] - 字节码   提供者名称:lcg     0.522780409241957 0.070344 NHibernate.Cfg.Environment 2010-07-15 09:20:59,734 [7] INFO NHibernate.Cfg.Environment [(null)] - 使用   反射优化器     0.529107470362853 0.006327 NHibernate.Cfg.Configuration 2010-07-15 09:20:59,827 [7] INFO NHibernate.Cfg.Configuration [(null)] - 映射   资源:Kctc.BusinessLayer.Mappings.StoredWill.hbm.xml     0.623336485503046 0.094229 NHibernate.Dialect.Dialect 2010-07-15 09:21:00,109 [7] INFO NHibernate.Dialect.Dialect [(null)] - 使用   方言:NHibernate.Dialect.MsSql2008Dialect     0.91570185596214 0.292365 NHibernate.Cfg.Configuration 2010-07-15 09:21:01,390 [7] ERROR NHibernate.Cfg.Configuration [(null)] - 可以   不编译映射文档:   Kctc.BusinessLayer.Mappings.StoredWill.hbm.xml   NHibernate.MappingException:无法编译映射文档:   Kctc.BusinessLayer.Mappings.StoredWill.hbm.xml --->   System.InvalidOperationException:无法生成临时类   (结果= 1)。错误CS2001:源文件'C:\ WINDOWS \ TEMP \ shp2uoc8.0.cs'   找不到错误CS2008:未指定输入

     

在System.Xml.Serialization.Compiler.Compile(Assembly parent,String   ns,XmlSerializerCompilerParameters xmlParameters,证据证据)   在System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping []   xmlMappings,Type [] types,String defaultNamespace,Evidence evidence,   XmlSerializerCompilerParameters参数,Assembly assembly,   Hashtable程序集)   System.Xml.Serialization.TempAssembly..ctor(XmlMapping [] xmlMappings,   键入[]类型,字符串defaultNamespace,字符串位置,证据   证据)   System.Xml.Serialization.XmlSerializer.GenerateTempAssembly(XmlMapping   xmlMapping,Type type,String defaultNamespace)at   System.Xml.Serialization.XmlSerializer..ctor(Type type,String   defaultNamespace)at   System.Xml.Serialization.XmlSerializer..ctor(Type type)at   NHibernate.Cfg.XmlHbmBinding.Binder.Deserialize [T](XmlNode节点)at at   NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.Bind(XmlNode节点)at at   NHibernate.Cfg.Configuration.AddValidatedDocument(NamedXmlDocument   doc)---内部异常堆栈跟踪结束---     2.20609881982207 1.290397未处理的执行错误无法编译映射文档:   Kctc.BusinessLayer.Mappings.StoredWill.hbm.xml at   NHibernate.Cfg.Configuration.LogAndThrow(异常异常)at   NHibernate.Cfg.Configuration.AddValidatedDocument(NamedXmlDocument   doc)at NHibernate.Cfg.Configuration.ProcessMappingsQueue()at   NHibernate.Cfg.Configuration.AddDocumentThroughQueue(NamedXmlDocument   文档)在NHibernate.Cfg.Configuration.AddXmlReader(XmlReader   hbmReader,String name)at   NHibernate.Cfg.Configuration.AddInputStream(Stream xmlInputStream,   字符串名称)在NHibernate.Cfg.Configuration.AddResource(String   路径,装配组件)at   NHibernate.Cfg.Configuration.AddAssembly(程序集)   Kctc.BusinessLayer.NHibernateSessionFactory.get_SessionFactory()in   C:\ Kctc \ Trunk \ Kctc.BusinessLayer \ NHibernateSessionFactory.cs:第26行
  在Kctc.BusinessLayer.NHibernateSessionFactory.OpenSession()中   C:\ Kctc \ Trunk \ Kctc.BusinessLayer \ NHibernateSessionFactory.cs:第39行
  在Developers_Test.ListSquirps(Object sender,EventArgs e)at   System.Web.UI.WebControls.Button.OnClick(EventArgs e)at   System.Web.UI.WebControls.Button.RaisePostBackEvent(字符串   eventArgument)at   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串   eventArgument)at   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler   sourceControl,String eventArgument)at   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
  在System.Web.UI.Page.ProcessRequestMain(布尔值   includeStagesBeforeAsyncPoint,Boolean   includeStagesAfterAsyncPoint)2.20665643259129 0.000558

这向我表明映射文件有错误或无法找到。但是如果开发应用程序工作正常,那么在预编译和部署映射文件时怎么会出现问题?!

有没有人对这里可能发生的事情有什么建议?

由于

2 个答案:

答案 0 :(得分:15)

好的,我知道了。在创建SessionFactory期间调用的XmlSerializer类需要对(默认情况下)C:\ Windows \ TEMP的写访问权限,以便它可以生成一些东西并在那里进行重击。

或者,您可以关注此博客http://www.hanselman.com/blog/ChangingWhereXmlSerializerOutputsTemporaryAssemblies.aspx上的黑客攻击。这会更改XmlSerializer存储其shiznit的默认位置。您所要做的就是在web.config / app.config文件的配置元素中添加以下元素:

<system.xml.serialization>
  <xmlSerializer tempFilesLocation="C:\SomeFolder\SomeOtherFolder\WhereeverYouWant"/>
</system.xml.serialization>

第一个解决方案感觉像是一个安全问题,而第二个解决方案感觉就像一个笨拙的黑客,后果难以预见。

为什么记录如此糟糕?

答案 1 :(得分:3)

检查.hbm.xml文件是否已定义为项目中的嵌入式资源。