.net - 错误 "Could not load file"但我没有要求它

标签 .net vb.net entity-framework

更新:我为 x86 重新编译,现在它可以工作了。但我仍然需要知道这里发生了什么,以及为什么我需要将我所有的 .net 应用程序重新编译为 x86...我从未使用过 oracle,而且我将来也不打算这样做。为什么它给我带来麻烦?

因为今天早上我无法运行所有使用 entityframework-v5 连接到 msSqlServer 的 .net 程序,我将堆栈错误粘贴在下面。

我在网络上的另一台电脑上尝试了相同的文件,它确实工作正常。所以我怀疑是 windows-update 在一夜之间造成了麻烦,所以我做了系统还原,仍然是同样的问题。

现在我的想法用完了。我不使用 oracle,也没有任何引用资料。正如我所说,同一文件夹中的相同文件昨天在我的电脑上运行,今天它们也可以在网络上的其他电脑上运行。

    System.BadImageFormatException: Could not load file or assembly 'System.Data.OracleClient.dll' or one of its dependencies.  is not a valid Win32 application. (Exception from HRESULT: 0x800700C1)
   at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName, ObjectHandleOnStack type)
   at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName)
   at System.Type.GetType(String typeName)
   at System.Data.Common.DbProviderFactories.IncludeFrameworkFactoryClasses(DataTable configDataTable)
   at System.Data.Common.DbProviderFactories.Initialize()
   at System.Data.EntityClient.EntityConnection.GetFactory(String providerString)
   at System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString)
   at System.Data.Entity.Internal.LazyInternalConnection.Initialize()
   at System.Data.Entity.Internal.LazyInternalConnection.CreateObjectContextFromConnectionModel()
   at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
   at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
   at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
   at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
   at System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider()
   at System.Linq.Queryable.Where[TSource](IQueryable`1 source, Expression`1 predicate)

最佳答案

This question表示您已经在您的机器上安装了 32 位版本的 Oracle 客户端组件。

您的堆栈跟踪显示如下:

  1. 您触发 Entity Framework 操作。
  2. Entity Framework 想要读取您的连接字符串。
  3. 它需要初始化您系统上安装的所有数据库提供程序。
  4. 它找到 Oracle 并尝试加载它。
  5. 它失败了,因为依赖项不支持 64 位。

您应该在确保没有其他软件依赖它之后完全卸载 Oracle Client,或者按照上面链接的答案中所述另外安装 64 位版本。

关于.net - 错误 "Could not load file"但我没有要求它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27555899/

相关文章:

c# - 在方法开头没有一堆 if 的情况下强制方法的输入参数?

c# - C# 中的 try & catch 结构

c# - 抛出什么样的异常?

mysql - 使用 Hangfire 进行自动付款处理

c# - EF 4.1 DBContext 和导航属性

c# - 静态方法可以在.NET中实现接口(interface)吗

java - WCF FaultException<T> 是否支持与 Java Web 服务故障的互操作

vb.net - .net WebService,绕过ssl验证!

wpf - 您如何将添加到 Canvas 中的用户控件放在后面的代码中

c# - 如何在一对多关系 EF 4.3.1 的导航集合中删除后正确清理