我正在使用一个系统来使用带有NHibernate的SqlServerCe。从我的驱动程序,如果我添加System.Data.SqlServerCe程序集作为参考,我可以很好地创建和运行对数据库的查询。但是,当尝试使用NHibernate时,我得到以下异常:
mscorlib.dll中出现'System.IO.FileNotFoundException'类型的第一次机会异常 附加信息:无法加载文件或程序集“System.Data.SqlServerCe”或其依赖项之一。系统找不到指定的文件。
我已经跟踪了对Assembly.Load(“System.Data.SqlServerCe”)的调用的异常,这看起来应该可行。 System.Data.SqlServerCe程序集在GAC中(我也尝试将其作为本地引用添加到CopyLocal = true,无效),我可以使用其成员很好,所以为什么我不能显式加载它?当我在Reflector中打开程序集时,它无法加载System.Transactions引用(我也尝试将它添加为本地引用,再次无效),因此加载该程序集可能是问题,而不是系统。 Data.SqlServerCe程序集。
这是一个常见问题吗?系统配置错误,可能吗?
答案 0 :(得分:8)
显然,这可以通过添加< qualifyAssembly>来解决。 app.config文件的元素。添加以下内容使我的应用程序顺利运行:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<qualifyAssembly partialName="System.Data.SqlServerCe" fullName="System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
</assemblyBinding>
</runtime>
谢谢!
答案 1 :(得分:2)
这很可能与某些系统(错误)配置有关。
但是,根据设计,SQL Server CE只是一个DLL,可以与您的产品一起发货
这意味着您只需在Copy local
的参考属性中将True
设置为System.Data.SqlServerCe
即可。
答案 2 :(得分:1)
我有类似的问题。我正在做的错误是我试图执行../obj/x86/Release中存在的.exe,而我应该执行./bin/Release中存在的.exe。 (我是C#的绝对新手)。
(我也注意到在这个../bin/Release目录中,引用的.dll文件是在本地复制的。)