2016-07-14 152 views
0

我真的不喜歡發佈這樣的問題,試圖尋找一個錯誤,可能我錯過了一些非常簡單的東西,但我剛開始學習NHibernate,我很努力地分析這個現在一天,並找不到問題。NHibernate無法編譯映射文件

我的域類:

namespace PanoMeasurer.Core.Domain 
{ 
    public class Panorama : EntityBase 
    { 
     public virtual double HeadingBase 
     { 
      get; 
      set; 
     } 
    } 
} 

namespace PanoMeasurer.Core.Domain 
{ 
    public class EntityBase : IEntity 
    { 
     public virtual Guid OID 
     { 
      get; 
      set; 
     } 
    } 
} 

我Panorama.hbm.xml映射文件:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
        assembly="PanoMeasurer.Core.Domain" 
        namespace="PanoMeasurer.Core.Domain"> 
    <class name="Panorama"> 
    <id name="OID" generator="guid.comb"/> 
    <property name="HeadingBase"/> 
    </class> 
</hibernate-mapping> 

我打電話在單元測試代碼:

 m_config = new Configuration() 
      .SetProperty(Environment.ReleaseConnections, "on_close") 
      .SetProperty(Environment.Dialect, typeof(SQLiteDialect).AssemblyQualifiedName) 
      .SetProperty(Environment.ConnectionDriver, typeof(SQLite20Driver).AssemblyQualifiedName) 
      .SetProperty(Environment.ConnectionString, "data source =:memory: ") 
      .AddFile("Mappings/Xml/Panorama.hbm.xml"); 

     m_sessionFactory = m_config.BuildSessionFactory(); 

     Session = m_sessionFactory.OpenSession(); 

     new SchemaExport(m_config).Execute(true, true, false, Session.Connection, Console.Out); 

創建新配置時出現異常:

OneTimeSetUp:NHibernate.MappingException:無法編譯映射文檔:映射/ XML/Panorama.hbm.xml ----> System.IO.DirectoryNotFoundException:淖FOIpossívellocalizar UMA單方面待辦事項caminho「C:\用戶\羅德里戈\應用程序數據\本地\ JetBrains公司\安裝\ ReSharperPlatformVs14 \映射\ XML \ Panorama.hbm.xml」。 異常不具有堆棧跟蹤

它說,它無法編譯,因爲據我瞭解,那是因爲它找不到某些路徑上的XML文件。爲什麼它在Resharper文件夾中查找所有文件?我的項目輸出全部設置爲默認bin/debug文件夾。

我的解決辦法是組織這樣的:

enter image description here

所以你可以看到,PanoMeasurer.Core.Domain組件存在,全景類位於那裏。

我的映射文件設置爲EmbededResource:

enter image description here

我還要告訴大家,我使用NHibernate的最新的金塊版本。

我在這裏錯過了什麼?

+0

什麼樣的價值屬性Panorama.hbm.xml有?構建操作並複製到輸出目錄?您必須在輸出目錄 – DanielVorph

+0

上搜索該文件它已設置爲Embedded Resource並始終複製 – RBasniak

+0

您是否可以將Build Action屬性更改爲「content」?當你編譯它時,用你的xml配置文件在輸出目錄中創建一個文件夾 – DanielVorph

回答

1

我發現這個問題:

1)當ReSharper的運行測試中,它使用),一些所謂的卷影複製組件(Unit testing with Resharper和複製組件到另一個文件夾來運行它們。

2).hbm.xml文件被設置爲Embeded Resource並被複制到其項目輸出路徑,並且Resharper未將該文件複製到程序集中,因此在測試執行期間無法找到它。

解決,而不是

.AddFile("/Mappings/Xml/Panorama.hbm.xml"); 

我用

.AddFile(AssemblyLocation() + "/Mappings/Xml/Panorama.hbm.xml"); 

凡AssemblyLocation正從codebase屬性的路徑,:

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

    return Path.GetDirectoryName(codebase.LocalPath); 
} 
+1

我有同樣的問題,這樣解決了我的問題,謝謝! – Winson