我有一個使用NHibernate根據映射文件生成數據庫模式的解決方案。我試圖將該功能從解決方案中分離出來,以便它可以用作獨立的控制檯應用程序。我可以提供一個路徑映射文件像這樣:需要爲程序集提供nhibernate配置路徑
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);
}
所以當它到達的地方嘗試添加它抱怨找不到NHibernateTestMappings.Core裝配該文件的點,因爲那裏是我獨立的應用程序的組件的引用,但每個映射文件中包含的程序集的引用:
<class name="NHibernateTestMappings.Core.Store, NHibernateTestMappings.Core" table="STORE" lazy="false">
我需要的是提供NHibernate的配置文件路徑,我組裝的DLL,而不是添加方式對它的引用,以便我可以換出app.config中的路徑,並生成我的模式。
是的,發佈後嘗試了各種各樣的東西,其中沒有任何工作。我更新了我的代碼以顯示我的最新版本。我也嘗試了一些appdomain的東西,但失敗了,因爲沒有默認的入口點,因爲我的核心是一個DLL而不是一個EXE。 –
這就是爲什麼我建議您使用上面的代碼。 然後你可以打電話: cfg.AddAssembly(muAssembly); 而不是使用字符串的重載,您可以使用下面的代碼: public Configuration AddAssembly(Assembly assembly) 它直接接受一個「Assembly」對象,並決定如何獲取該程序集。擁有一個沒有入口點的班級圖書館應該不是問題。 – Meligy