J'ai une solution qui utilise NHibernate pour générer le schéma db basé sur les fichiers de mappage. J'essaye de casser cette fonctionnalité hors de la solution ainsi elle peut être employée comme application de console autonome. Je suis en mesure de fournir un chemin vers les fichiers de mappage comme ceci:Nécessité de fournir une configuration nhibernate un chemin à un assembly
NHibernate.Cfg.Configuration cfg = new NHibernate.Cfg.Configuration();
/**/
Assembly contractsAssembly = Assembly.LoadFrom(@"C:\Data\Development\NHibernateTestMappings\Source\DomainModel\Core\bin\Debug\NHibernateTestMappings.Core.Contracts.dll");
Assembly assembly = Assembly.LoadFrom(@"C:\Data\Development\NHibernateTestMappings\Source\DomainModel\Core\bin\Debug\NHibernateTestMappings.Core.dll");
cfg.AddAssembly(contractsAssembly);
cfg.AddAssembly(assembly);
/**/
DirectoryInfo directoryInfo = new DirectoryInfo(@"C:\Data\Development\NHibernateTestMappings\Source\DomainModel\Core\Mappings");
FileInfo[] mappingfiles = directoryInfo.GetFiles("*.hbm.xml");
foreach (FileInfo fi in mappingfiles)
{
cfg.AddFile(fi.FullName);
//cfg.Configure(myAssembly, fi.FullName);
//cfg.AddResource(fi.FullName, myAssembly);
}
Alors, quand il arrive au point où il tente d'ajouter le fichier, il se plaint qu'il ne peut pas trouver l'ensemble NHibernateTestMappings.Core parce qu'il aucune référence à l'ensemble dans mon application autonome, mais chaque fichier de mappage contient une référence à l'assemblée:
<class name="NHibernateTestMappings.Core.Store, NHibernateTestMappings.Core" table="STORE" lazy="false">
Ce que je besoin est un moyen de fournir la configuration NHibernate un chemin de fichier à la dll de mon assemblée plutôt que d'ajouter une référence pour que je puisse juste échanger des chemins dans un app.config et que ceci génère mon schéma.
Oui, essayé diverses choses après avoir posté cela, mais cela n'a pas fonctionné. J'ai mis à jour mon code pour montrer ma dernière version. J'ai aussi essayé des trucs sur l'appdomain, mais ça a échoué parce qu'il n'y a pas de point d'entrée par défaut car mon noyau est un dll et non un exe. –
C'est pourquoi je vous recommande d'utiliser le code ci-dessus. Ensuite, vous appelez: cfg.AddAssembly (muAssembly); Au lieu de la surcharge qui prend une chaîne, vous utilisez cette charge: public AddAssembly de configuration (Assembly) Qui accepte un objet "Assembly" directement, et vous décidez comment obtenir cet assembly pour cela. Avoir une bibliothèque de classe sans point d'entrée ne devrait pas poser de problème du tout. – Meligy