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