我们有一个 Fluent NHibernate 映射测试正在本地计算机上通过,但是当我们签入 TFS 时,测试在构建服务器上失败。我们正在使用 MSTest。我们得到的错误是:
NHibernate.Bytecode.UnableToLoadProxyFactoryFactoryException:在配置代理工厂类期间无法加载类型“NHibernate.ByteCode.Castle.ProxyFactoryFactory,NHibernate.ByteCode.Castle”。
可能的原因有:
- NHibernate.Bytecode 提供程序集未部署。
- 用于初始化会话工厂部分的“proxyfactory.factory_class”属性的 typeName 格式不正确。
解决方案:
确认您的部署文件夹包含以下程序集之一:
NHibernate.ByteCode.LinFu.dll
NHibernate.ByteCode.Castle.dll ---> System.IO.FileNotFoundException:无法加载文件或程序集“NHibernate.ByteCode.Castle”或其依赖项之一。系统找不到指定的文件。警告:程序集绑定日志记录已关闭。
要启用程序集绑定失败日志记录,请将注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) 设置为 1。
注意:程序集绑定失败日志记录会带来一些性能损失。
要关闭此功能,请删除注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog]。
我们检查了放置文件夹,NHibernate.Bytecode.Castle.dll 就在那里。我们有 dll 和对 Castle.Core、Castle.DynamicProxy2、Iesi.Collections、log4net、NHibernate 和 NHibernate.ByteCode.Castle 的引用。我们已经通过 MSBuild 使用 drop 文件夹中的命令提示符运行测试,但错误仍然发生。我们的流畅映射如下所示(NHibernateConfig.MappingConfiguration())调用实际映射,自动映射):
流畅地.Configure()
.Database(SQLiteConfiguration.Standard.ShowSql().InMemory())
.Mappings(NHibernateConfig.MappingConfiguration())
.BuildConfiguration();
有什么想法可能是为什么吗?
如果我记得字节码程序集是如何工作的,那么您实际上并没有对它们进行有用的引用。也就是说,您没有在代码中专门使用它们的类之一。结果,“智能”参考复制导致这些内容无法被拉入。(我可能会弥补这一点,抱歉)。
为了解决这个问题,你可以:a)使适当的字节码程序集成为“始终复制”内容引用(meh)或b)创建一个愚蠢的小类(私有静态),它引用实际字节码程序集中的任何单个类(meh + 1)。
我确信还有另一种选择可以强制遵守引用,但这两个应该是最简单的 20 秒解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)