2012-04-25 40 views
3

從nhibernate 1.0.4.0升級到nhibernate 3.3後,當我嘗試運行「Configuration cfg = new Configuration();」時遇到以下錯誤:'NHibernate.Cfg.Configuration'的類型初始值設定項引發異常

System.TypeInitializationException was caught 
    Message="The type initializer for 'NHibernate.Cfg.Configuration' threw an exception." 
    Source="NHibernate" 
    TypeName="NHibernate.Cfg.Configuration" 
    StackTrace: 
     at NHibernate.Cfg.Configuration..ctor() 
     at KEH.Web.Data.NHibernateUtil..cctor() in F:\Projects\KEH nHibernate\KEHWeb\Data\Data\NHibernateUtil.cs:line 24 
    InnerException: System.NotSupportedException 
     Message="The invoked member is not supported in a dynamic assembly." 
     Source="mscorlib" 
     StackTrace: 
      at System.Reflection.Emit.AssemblyBuilder.get_Location() 
      at log4net.Util.SystemInfo.AssemblyLocationInfo(Assembly myAssembly) 
      at log4net.Core.DefaultRepositorySelector.GetInfoForAssembly(Assembly assembly, String& repositoryName, Type& repositoryType) 
      at log4net.Core.DefaultRepositorySelector.CreateRepository(Assembly repositoryAssembly, Type repositoryType, String repositoryName, Boolean readAssemblyAttributes) 
      at log4net.Core.DefaultRepositorySelector.CreateRepository(Assembly repositoryAssembly, Type repositoryType) 
      at log4net.Core.DefaultRepositorySelector.GetRepository(Assembly repositoryAssembly) 
      at log4net.Core.LoggerManager.GetLogger(Assembly repositoryAssembly, String name) 
      at log4net.LogManager.GetLogger(Assembly repositoryAssembly, String name) 
      at log4net.LogManager.GetLogger(Type type) 
      at lambda_method(ExecutionScope , Type) 
      at NHibernate.Log4NetLoggerFactory.LoggerFor(Type type) 
      at NHibernate.LoggerProvider.LoggerFor(Type type) 
      at NHibernate.Cfg.Configuration..cctor() 
     InnerException: 

任何幫助將不勝感激。

的NHibernateUtil類代碼如下:

public class NHibernateUtil 
    { 
     private static readonly Configuration cfg; 
     private static readonly ISessionFactory sessionFactory; 
     private static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 

     static NHibernateUtil() 
     { 
      try 
      { 
       logger.Debug("Before Initializing NHibernate"); 
       cfg = new Configuration(); 
       cfg.AddAssembly("KEH.Web.Data"); 
       sessionFactory = cfg.BuildSessionFactory(); 
       logger.Debug("Initialized NHibernate"); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.Message); 
      } 
     } 

     public static ISession OpenSession() 
     { 
      logger.Debug("Before Getting Connection"); 
      return sessionFactory.OpenSession(); 
     } 
} 
+0

請向我們展示你在'NHibernateUtil.cs:line 24'上所擁有的東西。這不是NHibernate文件,它是你自己的項目之一。 TypeInitializer異常是因爲異常是從(靜態)構造函數引發的。通常最好避免引發構造函數的異常。 – Abel 2012-04-25 12:50:08

+1

您的log4net程序集輸出到應用程序的bin文件夾中嗎? – Vadim 2012-04-25 16:29:33

+0

是的我在bin文件夾中有log4net程序集 – ramya 2012-04-26 06:08:06

回答

1

不知道爲什麼它不工作,但我只是更換

cfg.AddAssembly("KEH.Web.Data"); 

cfg.AddAssembly(typeof(Entity).Assembly); 

,其中實體是一些存在於映射文件組合中的類。

4

我有同樣的問題。 實際的原因是我使用了一個使用舊版本的log4net的庫。 NHibernate嘗試使用它,如果找到。所以我不得不強迫它使用(或實際上不使用)其他記錄器通過添加這樣的行: LoggerProvider.SetLoggersFactory(new NoLoggingLoggerFactory());

+0

的確,我有完全相同的問題。我有log4net版本1.2.9.0。在更新到1.2.11.0後,問題消失了。 – sl3dg3 2013-04-10 16:00:12

+0

謝謝,難倒我,直到我看到這一點。 – sluiper 2015-01-21 09:27:05

-2

爲了他人的利益誰可能通過谷歌找到了這個問題:

對於我們來說,這個錯誤是紅鯡魚。我們的應用程序運行良好,直到我們部署了一個新組件並且它會失敗(以一種未知的方式),並且IIS將回收應用程序池。問題是我們使用的HTML到JPG組件是以某種方式發生錯誤,並導致我們所有的w3wp.exe工作進程消耗最大的CPU。當應用程序池通過IIS進行回收時,整個網站將停止運行,並且NHibernate會不斷拋出此錯誤,直到出現iisreset。在回收之前,即使在CPU負載情況下,該網站仍會非常敏感。

雖然我們仍然不知道組件是如何失敗的,或者它爲什麼級聯到NHibernate初始化的問題,但重點是它是一個紅鯡魚。確保在新部署後不久「突然」發生此錯誤,並保留CPU利用率的日誌,以便在發生故障時幫助您發現問題。最後,如果停機時間每天都發生在接近同一時間的情況下,則可能是自動IIS應用程序池回收,並且這應該是另一個線索,即在回收期間有東西正在竊聽您的應用程序和曲面。

最終,我們禁用了HTML到JPG組件,直到找到解決方法並且我們的正常運行時間恢復到100%。

希望這可以幫助別人。

相關問題