nhibernate - Unity3D + NHibernate,崩溃加载 "Unity 3.5 .net full Base Class Libraries"

标签 nhibernate unity3d

我正在尝试将 Unity3d 和 NHibernate 结合起来。经过大量的魔法后,它在编辑器中工作,但在 Windows 独立 .exe 中崩溃。

我拥有的主要数据访问库:

MySql.Data.dll
I18N.dll
I18N.West.dll
System.Data.dll (2.0.5, for Unity)
NHibernate.dll (3.4.0)

win 应用程序启动时的崩溃是:

TypeLoadException: Could not load type 'System.Data.Common.DbProviderFactories' from assembly 'NHibernate'.
  at NHibernate.Driver.MySqlDataDriver..ctor () [0x00000] in d:\Downloads\nh\NHibernate-3.4.0.GA-src\src\NHibernate\Driver\MySqlDataDriver.cs:27 

.........  omitted System.Reflection chain .......


  at NHibernate.Connection.ConnectionProvider.ConfigureDriver (IDictionary`2 settings) [0x00020] in d:\Downloads\nh\NHibernate-3.4.0.GA-src\src\NHibernate\Connection\ConnectionProvider.cs:107 
Rethrow as HibernateException: Could not create the driver from NHibernate.Driver.MySqlDataDriver, NHibernate, Version=3.4.0.0, Culture=neutral, PublicKeyToken=null.
  at NHibernate.Connection.ConnectionProvider.ConfigureDriver (IDictionary`2 settings) [0x00052] in d:\Downloads\nh\NHibernate-3.4.0.GA-src\src\NHibernate\Connection\ConnectionProvider.cs:113 

  at NHibernate.Connection.ConnectionProvider.Configure (IDictionary`2 settings) [0x0004f] in d:\Downloads\nh\NHibernate-3.4.0.GA-src\src\NHibernate\Connection\ConnectionProvider.cs:64 

  at NHibernate.Connection.ConnectionProviderFactory.NewConnectionProvider (IDictionary`2 settings) [0x000bd] in d:\Downloads\nh\NHibernate-3.4.0.GA-src\src\NHibernate\Connection\ConnectionProviderFactory.cs:50 

由于它无法加载System.Data.Common.DbProviderFactories,所以我认为它无法获取System.Data。同时,我的 System.Data 已 100% 清楚地加载,因为还有另一个身份验证代码可以直接与 DB 完美配合,不涉及 NHibernate。

会不会是因为NHibernate 是用 .Net Framework visual studio 配置文件中的 System.Data 构建的,而 Unity 项目使用的是 2.0.5 版本?

我尝试使用“Unity 3.5 .net 完整基类库”中的 System.Data 构建 NHibernate。它已成功构建,但当我将 System.Data.dll 放入插件时,Unity 也会崩溃:

InvalidProgramException: Invalid IL code in System.Data.Common.DbConnectionStringBuilder:Remove (string): IL_0000: ret    

很奇怪,Unity 不应该从 c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v3.5\Profile\Unity Full v3.5\System.Data.dll 读取库?

同时,我无法使用 c:\Program Files (x86)\Unity\Editor\Data\Mono\lib\mono\unity\System.Data.dll 构建 NHibernate。默认情况下,它从 GAC 加载 v2.0.0。当我尝试在 .csproj 中显式写入 2.0.5 版本时,它失败了:

Warning 2   The primary reference "System.Data, Version=2.0.5.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 processorArchitecture=x86" could not be resolved because it has an indirect dependency on the .NET Framework assembly "System.Transactions, Version=2.0.5.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" which has a higher version "2.0.5.0" than the version "2.0.0.0" in the current target framework.   NHibernate

我很绝望 - 我应该如何构建 NHibernate 以及使用哪些库使其在 Unity 中工作?

希望有人知道答案。 提前致谢! 由良

最佳答案

好吧,经过一周的定期尝试,我终于让它工作了:

  1. 为 .Net 3.5 构建 NHibernate(不是“Unity 配置文件”,只是常规的 3.5)
  2. 将 3.5 System.Data.dll 从 GAC 放到 Unity 的“plugins”文件夹中

就是这样。

我仍然想知道为什么 Unity 不能接受来自“”Unity 3.5 .net full Base Class Libraries”.Net 配置文件的库,但至少它不再阻止我了。

关于nhibernate - Unity3D + NHibernate,崩溃加载 "Unity 3.5 .net full Base Class Libraries",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29862650/

相关文章:

nhibernate - 在存储库层中使用 Fluent NHibernate 进行注入(inject)

NHibernate 左外连接不相关实体

nhibernate - 流畅的 NHibernate : Prevent class from being mapped

c# - 当我向其中添加一项时,为什么 NHibernate 会删除并重新创建集合中的所有关联?

image - Sprite 和纹理的区别?

text - 如何将字符串的内容分配给 Unity 4.6 中的文本字段?

.net - 无法确定实体是暂时的还是分离的

c# - Unity Linux 包导出正在修改我的 DLL

c# - Unity - 柏林噪音 Octave

c# - 我可以在 Visual Studio/Code 中测试/运行 Unity C# 吗?