【问题标题】:Fluent NHibernate Error Mapping Assembly Outside of \bin (ASP.NET)\bin (ASP.NET) 之外的流利 NHibernate 错误映射程序集
【发布时间】: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("{0}{1}\\{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 在加载它们后会出现问题?

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

【问题讨论】:

    标签: fluent-nhibernate mapping assemblies


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-26
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多