在我的开发网络应用程序上,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
这向我表明映射文件有错误或无法找到。但是如果开发应用程序工作正常,那么在预编译和部署映射文件时怎么会出现问题?!
有没有人对这里可能发生的事情有什么建议?
由于
答案 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文件是否已定义为项目中的嵌入式资源。