NHibernate MappingException:无法编译映射文档

Dav*_*vid 7 deployment nhibernate exception nhibernate-mapping

在我的开发Web应用程序上,NHibernate正在花哨.当我预编译和部署站点时,我在创建SessionFactory时得到MappingException.

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

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:未指定输入 无法编译映射文档:Kctc.BusinessLayer.Mappings.StoredWill.hbm.xml ---> System.InvalidOperationException:无法生成临时类(result = 1).错误CS2001:找不到源文件'C:\ WINDOWS\TEMP\shp2uoc8.0.cs'错误CS2008:未指定输入 无法编译映射文档:Kctc.BusinessLayer.Mappings.StoredWill.hbm.xml ---> System.InvalidOperationException:无法生成临时类(result = 1).错误CS2001:找不到源文件'C:\ WINDOWS\TEMP\shp2uoc8.0.cs'错误CS2008:未指定输入

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

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

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

谢谢

Dav*_*vid 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>
Run Code Online (Sandbox Code Playgroud)

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

为什么记录如此糟糕?