6
votes

L'initialisateur de type pour 'Nhibernate.cfg.configuration' a jeté une exception

Après la mise à niveau de NHibernate 1.0.4.0 à NHibernate 3.3 IM Rencontrez l'erreur suivante lorsque j'essaie d'exécuter "Configuration CFG = nouvelle configuration ();"

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 commentaires

S'il vous plaît montrez-nous ce que vous avez à NhibernateUtil.cs: Ligne 24 . Ce n'est pas un fichier NHibernate, c'est l'un de votre propre projet. L'exception de typeInitialisation est que l'exception est relevée d'un constructeur (statique). Il est généralement préférable d'éviter d'élever des exceptions à partir de constructeurs.


Votre sortie de montage log4net est-elle sur le dossier BIN de votre application?


oui j'ai l'assemblage log4net dans le dossier bin


On dirait qu'il y a un appel pour obtenir un enregistreur dans une assemblée générée. Utilisez-vous une réflexion.MIT quelque part?


3 Réponses :


1
votes

Je ne sais pas pourquoi ça ne marche pas, mais je ne ferais que remplacer xxx

avec xxx

où l'entité existe une classe qui existe dans l'assemblage de vos fichiers de mappage.


0 commentaires

5
votes

J'ai eu le même problème. La raison réelle a été utilisée une bibliothèque qui a utilisé une ancienne version de log4net. NHibernate essaie de l'utiliser si vous trouvez. Je devais donc forcer à utiliser (ou réellement utiliser) autre enregistreur en ajoutant une telle ligne: LoggerProvider.setloggersFactory (nouveau NologgingLoggergerFactory ());


2 commentaires

Vrai, j'avais exactement le même problème. J'avais log4net version 1.2.9.0. Après une mise à jour à 1.2.11.0, le problème était parti.


Merci, m'aspéré aussi jusqu'à ce que je voyais ça.



-2
votes

Pour le bénéfice des autres personnes qui pourraient trouver cette question via Google:

Pour nous, cette erreur était un hareng rouge. Notre application a couru bien jusqu'à ce que nous ayons déployé un nouveau composant et que cela échouerait (de manière inconnue) et IIS recyclerait le pool d'applications. Le problème était un composant HTML à JPG que nous utilisions était erroné d'erreur et que tous nos processus de travailleur W3WP.EXE consomment maximum de la CPU. Lorsque le pool d'applications a été recyclé via IIS, tout le site irait et NHibernate lancerait cette erreur en continu jusqu'à ce qu'un IISRESET. Avant le recyclage, le site serait toujours très réactif, même avec la charge de la CPU.

Bien que nous ne sachions toujours pas comment le composant manquait ou pourquoi il était en cascade à des problèmes d'initialisation de NHibernate, il s'agit d'un hareng rouge. Assurez-vous de surveiller cette erreur «soudainement» se produisant peu de temps après un nouveau déploiement et continuez les journaux de votre utilisation de la CPU afin qu'il puisse vous aider à repérer lorsque des problèmes sont brassés. Enfin, si le temps d'arrêt se passe presque à la même heure chaque jour, c'est probablement un recyclage automatique de la piscine AII IIS, et cela devrait être un autre indice que quelque chose émet de votre application et de votre revêtement pendant le recyclage.

En fin de compte, nous avons désactivé le composant HTML à JPG jusqu'à ce qu'une solution de contournement puisse être trouvée et notre temps à l'heure ressembla à 100%.

J'espère que cela aide quelqu'un.


0 commentaires