【问题标题】:NHibernate - missing dll'sNHibernate - 缺少 dll
【发布时间】:2010-08-26 10:04:29
【问题描述】:

这个电话

// this._cfg 是一个 NHibernate 配置实例
this._sessionFactory = this._cfg.BuildSessionFactory();

在运行时给我这个异常(不是在编译时)。

无法加载文件或程序集“NHibernate.ByteCode.Castle”或其依赖项之一。系统找不到指定的文件。":"NHibernate.ByteCode.Castle

到目前为止还可以。但问题是,这段代码在一个类库项目中运行,我已经在该项目中引用了 NHibernate.ByteCode.Castle(以及所有其他 NHibernate dll)。

Wierder:我可以通过在调用我的类库的 Windows WPF 可执行项目中额外引用 NHibernate dll 来修复异常。但是 Windows WPF 可执行文件不包含直接使用 NHibernate 的代码(证明:它编译良好,没有任何 NHibernate 引用)。发生什么了?显然,在实际使用 NHibernate 的项目中引用 NHibernate.ByteCode.Castle 是不够的。有人知道为什么吗?

【问题讨论】:

    标签: nhibernate castle


    【解决方案1】:

    我知道这是旧的,但我为解决依赖问题所做的工作很简单:

    在我的 UnitOfWork 中,我添加了一个静态方法:

    private static void bringCastleDamnit()
    {
       var pf = new NHibernate.ByteCode.Castle.ProxyFactoryFactory();
    }
    

    然后,只有在那时,MSBuild 才会看到需要它并将其复制到我的(asp.net 和控制台)应用程序的输出目录中,这些应用程序引用了我的数据项目。

    【讨论】:

    • 我对你的方法的名字大吃一惊。 :-)
    【解决方案2】:

    我根本不会引用城堡字节码工厂;只需确保使用构建后步骤将其(以及所有其他需要的依赖项)复制到输出目录即可。

    【讨论】:

    • 谢谢丹,我现在明白了。该应用程序不需要引用这些 dll,但它们确实需要存在于输出目录中(我猜,以便可以通过反射之类的东西访问它们?)这解释了我所看到的行为。最后,我将它们作为 refs 留在了项目中,因为与将它们作为单独的项目添加到项目输出文件夹相比,解决方案资源管理器更加混乱。
    • @user409898:正确,它们是在运行时动态加载的。我仍然建议使用构建后步骤执行程序集复制,这会使事情变得更简单。只需将所有复制操作放入一个批处理文件并调用它。
    猜你喜欢
    • 2011-04-15
    • 2020-09-01
    • 2014-08-31
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多