in (ASP.NET) 之外的流利 NHibernate 错误映射程序集

Posted

技术标签:

【中文标题】\bin (ASP.NET) 之外的流利 NHibernate 错误映射程序集【英文标题】:Fluent NHibernate Error Mapping Assembly Outside of \bin (ASP.NET) 【发布时间】:2014-07-04 06:12:23 【问题描述】:

我正在尝试动态映射一个或多个程序集,这些程序集本身是动态加载到 ASP.NET 网站中的。我有我的 web.config 设置以允许探测一个名为“paks”的子目录(它也设置为 appSetting,因此我可以稍后构建我的路径以访问 DLL),这可以 100% 正常加载主程序集,但 FluentNHibernate 有问题:

我的 .Mapping 如下所示:

 .Mappings(m => 
   foreach (String assembly in assemblies) 
     String path = String.Format("01\\2.dll", HttpRuntime.AppDomainAppPath, ConfigurationManager.AppSettings["Packages"], assembly);
     AssemblyName y = AssemblyName.GetAssemblyName(path);
     Assembly asm = Assembly.Load(y);
     m.FluentMappings.AddFromAssembly(asm);
   
 )

当我运行它时,我得到一个异常:

“无法编译映射文档:(XmlDocument)”

但是,如果我将第二组 DLL 复制到 \bin 目录中,事情就会神奇地开始工作。我假设是因为现在 NHibernate 可以找到 DLL,而以前它不能。我使用 Assembly.Load() 将它们动态加载到 .NET 中没有任何问题,那么为什么 NHibernate 在加载它们后会出现问题?

有人知道我该如何解决这个问题吗?

【问题讨论】:

【参考方案1】:

对此感到抱歉,事实证明这是我对 ASP.NET 探测和程序集加载的轻微误解。 我认为一旦加载了程序集,它就可以被引用它的对象定位。但似乎并非如此。更糟糕的是,我认为探测会递归地遍历到子目录(它显然没有)并且是我正在执行的初始加载所必需的(这也不是这种情况)。我的程序集位于 %root%/pak/pdf 中,但我的探针仅设置为 %root%/pak,这就是为什么即使它已加载,引用它的其他程序集也无法找到它。

【讨论】:

以上是关于in (ASP.NET) 之外的流利 NHibernate 错误映射程序集的主要内容,如果未能解决你的问题,请参考以下文章

在 asp.net MVC5 EF6 中使用流利的 api 映射表?

ASP.NET MVC+WCF+NHibernate+Autofac 框架组合

是否可以在 asp.net 之外使用 Razor View Engine

我可以在 IIS 之外托管 ASP.NET 网站吗?

获取JavaScript和ASP.NET交谈(在AJAX之外)

在 MVC 之外使用 ASP.Net MVC 数据注释