2012-09-04 28 views
1

我已經搜索了現有的主題,當然還嘗試了其中提供的解決方案,但沒有成功。也許有人可以提供一些額外的提示。已修復:從外部程序集加載NHibernate映射會導致異常

下面是這種情況:

我要使用一個NHibernate的項目從幾個組件的處理實體。這應被處理的組件包括一些實體以及映射文件編譯爲嵌入的資源:添加映射時

Assembly assembly = Assembly.Load(assemblySourcePath); 

最後:

namespace projectName.namespace 
{ 
    public class Entity 
    { 
     public virtual Guid Id { get; set; } 
     public virtual string IsoCode { get; set; } 
    } 
} 

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="projectName.namespace.Entity,projectName"> 
     <id name="Id" column="EntityId"> 
      <generator class="guid" /> 
     </id> 
    </class> 
</hibernate-mapping> 

在NHibernate的項目,然後將組件通過加載到配置NHibernate拋出一個MappingException:

configuration.AddAssembly(assembly); 

我真的不知道如何解決這個問題。你有沒有人?

問候!

編輯1 這裏是例外輸出(翻譯和總結):

NHibernate.MappingException: Could not compile the mapping document (the one from above) 
persistent class "classname, assemblyname" not found -> System.IO.FileNotFoundException: file or assembly "assemblyname" or one of its dependencies not found. 

編輯2 我有另一個嘗試用流利的NHibernate的。映射類再次獲得發現的,而不是實體:

persistent class dom.Project.BusinessEntities.Class, dom.Project, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null not found 

問候

編輯3溶液 我終於成功了,夥計們。解決方案非常簡單,並且顯示nhibernate可以加載任何程序集,無論是否在域根目錄下。 安裝該應加載到全局程序集緩存和NHibernate將停止其抗議大會:-)

的問候,並再次感謝

+2

發佈完整的異常總是有幫助的。 Exception.ToString()是你的朋友。 –

+0

我的壞,科爾,你說得對,當然..只是第二個 – mitch182

+0

讓我困惑的是,hibernate首先在程序集中找到映射文件,但是沒有找到程序集本身。 nhibernate在哪裏搜索程序集?我是否必須更改映射文檔中的彙編鏈接? – mitch182

回答

0

NHibernate的只能從裝配負荷實體位於當前應用程序域根下路徑。嘗試將程序集放在bin/Debug下面的臨時文件夾中並指向它 - 應該解決問題

+0

我已經嘗試過,但仍然無法工作,儘管程序集的代碼庫現在位於nhibernate項目的調試目錄中。怎麼樣命名空間?我的意思是它可能是一個問題,nhibernate項目之一(nihbernateproject.dataaccess)不同於namespace.of.otherproject? – mitch182

+0

它不應該是一個問題 – tchrikch

+0

它不是 - 程序集緩存是問題和解決方案。 – mitch182