2011-07-16 23 views
0

私はhibernate.cfg.xml congifファイルをPersistenceManagerプロジェクトに配置しています。このxmlファイルの物理パスをプログラムで設定するにはどうすればよいですか?

enter image description here

そして、私はNHibernateは(cfg.Configureとライン)を設定するには、このゲッターで、この構成ファイルへの物理パスを設定するプログラムで必要があります。

public class SessionService 
{ 
    private static ISessionFactory _sessionFactory = null; 
    public static ISessionFactory SessionFactory 
    { 
     get 
     { 
      if (_sessionFactory == null) 
      { 
       Configuration cfg = new Configuration(); 
       string fullPath = (new SessionService()).GetType().Assembly.Location; 

       cfg.Configure(@"the working path to hibernate.cfg.xml"); 

       //I will Add Mapping directives here 

       _sessionFactory = cfg.BuildSessionFactory(); 
      } 

      return _sessionFactory; 
     } 
    } 
} 

にはどうすれば安全に行うことができます文字列 "hibernate.cfg.xml"を入力して、C#に物理パスの残りの部分を生成させるだけです。

答えて

1

ファイルのプロパティウィンドウで、 "Copy to Output Directory"を "Copy if Outputer"に設定します。パス(ファイル名のみ)を追加せずに、Configureメソッドで見つかるはずです。

編集:は、実行時に完全なパスを取得するには、あなたはこれを試すことができます。アプリケーションの作業ディレクトリは、独自のディレクトリに設定されている限り、動作するはずです

cfg.Configure(Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), @"hibernate.cfg.xml")); 
+0

。これはそうではない可能性があります(たとえばサービスとして実行しているときや自動起動しているときなど)。そのため、実行ファイルのパスを追加しても問題はありません。 – Mario

+0

@Mario:しかし、私はそれをプログラムで行うことができますか? – pencilCake

+1

アプリケーションのパスを取得するには、単に 'Path.GetDirectoryName(Application.ExecutablePath)'を評価します。 – Mario

関連する問題