2016-07-14 16 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:C: Users \ Rodrigo \ AppData \ Local \ JetBrains \ Installations \ ReSharperPlatformVs14 \ Mappings \ 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

で検索する必要があります。埋め込みリソースとコピーに常に設定されています – RBasniak

+0

ビルドアクションプロパティを「コンテンツ」に変更できますか?あなたがそれをコンパイルするとき、あなたのXML設定ファイルで出力ディレクトリのフォルダを作成する – DanielVorph

答えて

1

私は問題を発見:

1)それはそれらを実行するために別のフォルダにアセンブリのシャドウコピー(Unit testing with Resharper)と呼ばれるものとコピーのアセンブリを使用してReSharperのとテストを実行しています。

2).hbm.xmlファイルが埋め込みリソースに設定されていてプロジェクトの出力パスにコピーされていて、Resharperがアセンブリでこのファイルをコピーしていないため、テスト実行中に見つかりませんでした。解決するために

、代わりに

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

の私はAssemblyLocationは、コードベースプロパティからパスを取得している

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

使用:

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

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

私は同じ問題を抱えています。 – Winson

関連する問題