1

我创建了一个项目,并使用 NuGet 安装 Nhibernate.Search。在安装过程中,NuGet 还会为我下载 Lucene.Net。

使用 NuGet,我下载并安装了以下软件包

  • FluentNHibernate.dll:1.3.0733
  • NHibernate.dll:3.3.1.4000
  • NHibernate.Search.dll:2.0.2.4000
  • Lucene.Net.dll:2.9.4.1

所有依赖项都由 NuGet 管理。但是当我运行以下代码时

using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate;
using NHibernate.Search.Event;
using NHibernate.Search.Store;

namespace Test {
    public class NHibernateSearchSessionProvider {
        private static ISessionFactory sessionFactory;
        private static object syncRoot = new object();

        public static ISessionFactory SessionFactory {
            get {
                lock (syncRoot) {
                    if (sessionFactory == null) {
                        sessionFactory = createSessionFactory();
                    }

                    return sessionFactory;
                }
            }
        }

        private static ISessionFactory createSessionFactory() {
            var config = Fluently.Configure()
                .Database(MsSqlConfiguration.MsSql2008
                    .ConnectionString(c => c.FromConnectionStringWithKey("HomeDB"))
                )
                .Mappings(m => m.FluentMappings.AddFromAssemblyOf<UserAccountMap>())
                .BuildConfiguration();

            // Add NHibernate.Search listeners
            config.SetListener(NHibernate.Event.ListenerType.PostUpdate, new FullTextIndexEventListener());
            config.SetProperty("hibernate.search.default.indexBase", "~/LuceneIndex");
            return config.BuildSessionFactory();
        }
    }
}

异常消息Could not load file or assembly 'Lucene.Net, Version=2.9.2.2, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

看起来这个版本的 NHibernate.Search 仍在使用 Lucene.Net 2.9.2.2 而不是新版本。我总是可以手动修复所有依赖项,但我更喜欢使用 NuGet。

任何人都有经验我该怎么做才能使代码工作?

感谢您的任何建议

4

2 回答 2

0

这看起来像是NHibernate.Search nuget 包的配置错误,它声明它支持 Lucene.Net 2.9.2.2及更高版本。尝试修改您的packages.config文件以使用 Lucene 的 2.9.2.2 版本(而不是 2.9.4.1),并且 nuget 将在包恢复期间使用指定的版本。

您可能需要清理 bin 文件夹以删除“旧”2.9.4.1 程序集。

于 2012-08-28T06:46:32.450 回答
0

使用 Install-Package NHibernate.Search.MB 我试图修复它但它没有。已经 Nhibernate.Search 很老了

于 2016-11-02T13:35:35.020 回答