C# NHibernate映射异常

C# NHibernate映射异常,c#,nhibernate,C#,Nhibernate,我对学习NHibernate很感兴趣,所以我搜索了一门课程,我在Pluralsight中找到了一门,但当我继续学习这些示例时,我发现了这个异常,我不知道为什么会出现这个异常。。。这有点烦人,因为在我搜索的地方,我找不到关于异常的更多信息,也找不到NHibernate的最新指南。所以我的问题是: a) 对于异常本身,它发生的原因 b) 如果你能向我推荐一个学习NHibernate的网站、课程或任何最新的东西。 提前谢谢 我把代码留在这里: Customer.cs: namespace NHiber

我对学习NHibernate很感兴趣,所以我搜索了一门课程,我在Pluralsight中找到了一门,但当我继续学习这些示例时,我发现了这个异常,我不知道为什么会出现这个异常。。。这有点烦人,因为在我搜索的地方,我找不到关于异常的更多信息,也找不到NHibernate的最新指南。所以我的问题是:
a) 对于异常本身,它发生的原因
b) 如果你能向我推荐一个学习NHibernate的网站、课程或任何最新的东西。

提前谢谢

我把代码留在这里:

Customer.cs:

namespace NHibernateDemo
{
    public class Customer
    {
        public virtual int Id { get; set; }
        public virtual string FirstName { get; set; }
        public virtual string LastName { get; set; }
    }
}
Customer.hbm.xml:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:hibernate-mapping-2.2"
                   assembly="NHibernateDemo"
                   namespace="NHibernateDemo">
  <class name="Customer">
    <id name="Id">
      <generator class="native"/>
    </id>
    <property name="FirstName"/>
    <property name="LastName"/>
  </class>
</hibernate-mapping>
堆栈跟踪:

    NHibernate.MappingException: Could not compile the mapping document: NHibernateDemo.Customer.hbm.xml ---> System.InvalidOperationException: Error en el documento XML (1, 2). ---> System.InvalidOperationException: No se esperaba <hibernate-mapping xmlns='urn:hibernate-mapping-2.2'>.
   en Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderHbmMapping.Read109_hibernatemapping()
   --- Fin del seguimiento de la pila de la excepción interna ---
   en System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
   en System.Xml.Serialization.XmlSerializer.Deserialize(TextReader textReader)
   en NHibernate.Cfg.NamedXmlDocument..ctor(String name, XmlDocument document, XmlSerializer serializer)
   en NHibernate.Cfg.NamedXmlDocument..ctor(String name, XmlDocument document)
   en NHibernate.Cfg.Configuration.LoadMappingDocument(XmlReader hbmReader, String name)
   --- Fin del seguimiento de la pila de la excepción interna ---
   en NHibernate.Cfg.Configuration.LogAndThrow(Exception exception)
   en NHibernate.Cfg.Configuration.LoadMappingDocument(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 NHibernateDemo.Program.Main(String[] args) en d:\Sistema\Documents\Visual Studio 2015\Projects\NHibernateDemo\NHibernateDemo\Program.cs:línea 28
NHibernate.MappingException:无法编译映射文档:NHibernateDemo.Customer.hbm.xml-->System.invalidoOperationexception:错误en el documento xml(1,2)。-->System.InvalidOperationException:无se可操作性。
en Microsoft.Xml.Serialization.GeneratedAssembly.XMLSerializationReaderHBMapping.Read109_hibernatemapping()
---国际社会的例外情况---
en System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader XmlReader,字符串编码样式,XmlDeserializationEvents)
en System.Xml.Serialization.XmlSerializer.Deserialize(TextReader)
en NHibernate.Cfg.NamedXmlDocument..ctor(字符串名称、XmlDocument文档、XmlSerializer序列化程序)
en NHibernate.Cfg.NamedXmlDocument..ctor(字符串名称,XmlDocument文档)
en NHibernate.Cfg.Configuration.LoadMappingDocument(XmlReader hbmReader,字符串名称)
---国际社会的例外情况---
en NHibernate.Cfg.Configuration.loganthrow(异常)
en NHibernate.Cfg.Configuration.LoadMappingDocument(XmlReader hbmReader,字符串名称)
en NHibernate.Cfg.Configuration.AddInputStream(流xmlInputStream,字符串名称)
en NHibernate.Cfg.Configuration.AddResource(字符串路径,程序集)
en NHibernate.Cfg.Configuration.AddAssembly(程序集)
en NHibernateDemo.Program.Main(字符串[]args)en d:\Sistema\Documents\Visual Studio 2015\Projects\NHibernateDemo\NHibernateDemo\Program.cs:línea 28

问题是它找不到要编译的文件,所以:

private string AssemblyLocation()
{
    var codebase = new Uri(Assembly.GetExecutingAssembly().CodeBase);

    return Path.GetDirectoryName(codebase.LocalPath);
}
尝试手动将文件复制到
bin
目录(
Debug
Release
或..)

确保您的
NHibernateDemo.Customer.hbm.xml
属性是
Build Action:Embedded resource
Copy to Output Directory:Copy Always

如果仍然存在问题,请尝试添加:
cfg.AddFile(“NHibernateDemo.Customer.hbm.xml”)
(或指向
hbm.xml
文件的路径)

如果仍然存在问题,请尝试:
cfg.addFile(AssemblyLocation()+“NHibernateDemo.Customer.hbm.xml”)
(或指向
hbm.xml
文件的路径,其中
AssemblyLocation()
是:

private string AssemblyLocation()
{
    var codebase = new Uri(Assembly.GetExecutingAssembly().CodeBase);

    return Path.GetDirectoryName(codebase.LocalPath);
}

<>代码> CFG。AddioDebug <代码>不是必需的,所以如果上面的工作没有一个,你可以考虑删除它:P

我发现(感谢Fr.EdEric)该问题是hbm.xml文件中的一行。这一行是导致该问题发生的原因:

您可以发布异常消息吗?请阅读/发布完整的异常消息。该异常通常附带一个内部异常,提供更多详细信息,该异常可能有自己的内部异常等等。通常获取完整异常消息的更快更简单的方法是调用异常上的
.ToString()
,或者如果您正在Visual Studio下的调试会话中,请单击“将异常详细信息复制到剪贴板”。谢谢,我不知道“ToString”诀窍…我现在要更新错误日志…我猜是第二个
hibernate
出错了,
xmlns
属性值中的那个,而不是标记名。所以正确的版本是
是的,你是对的@Frédéric,是第二个“hibernate”在xmlns属性值中。我在完整的错误消息中看到了该错误。再次感谢您的建议
private string AssemblyLocation()
{
    var codebase = new Uri(Assembly.GetExecutingAssembly().CodeBase);

    return Path.GetDirectoryName(codebase.LocalPath);
}