6

nhibernate 1.0.4.0 から nhibernate 3.3 にアップグレードした後、「Configuration cfg = new 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();
        }
}
4

3 に答える 3

5

私も同じ問題を抱えていました。実際の理由は、古いバージョンの log4net を使用するライブラリを使用したためです。NHibernate は、見つかった場合にそれを使用しようとします。そのため、次の行を追加して、他のロガーを使用する (または実際には使用しない) ように強制する必要がありました。

于 2013-03-04T13:56:06.407 に答える
1

うまくいかない理由はわかりませんが、交換するだけです

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

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

ここで、Entity は、マッピング ファイルのアセンブリに存在するクラスです。

于 2012-04-26T17:06:16.443 に答える
-2

Google 経由でこの質問を見つける可能性のある他のユーザーのために:

私たちにとって、このエラーは厄介なものでした。私たちのアプリは、新しいコンポーネントをデプロイするまで問題なく動作し、(未知の方法で) 失敗し、IIS がアプリ プールをリサイクルしました。問題は、使用していた HTML から JPG へのコンポーネントが何らかのエラーを起こし、すべての w3wp.exe ワーカー プロセスが最大の CPU を消費することでした。アプリケーション プールが IIS 経由でリサイクルされると、サイト全体がダウンし、NHibernate は iisreset までこのエラーを継続的にスローします。リサイクル前は、CPU 負荷があってもサイトの応答性は非常に良好でした。

コンポーネントがどのように失敗したか、または NHibernate の初期化で問題が発生した理由はまだわかっていませんが、要点は、それが厄介者だったということです。新しい展開の直後にこのエラーが「突然」発生するのを監視し、CPU 使用率のログを保持して、問題が発生しているときに特定できるようにしてください。最後に、ダウンタイムが毎日ほぼ同じ時間に発生している場合、それはおそらく IIS アプリ プールの自動リサイクルであり、これは、何かがアプリケーションをバグアウトさせ、リサイクル中に表面化させているという別の手がかりになるはずです。

最終的に、回避策が見つかり、アップタイムが 100% に戻るまで、HTML から JPG へのコンポーネントを無効にしました。

これが誰かに役立つことを願っています。

于 2013-12-31T22:01:44.053 に答える