更新:我为 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 客户端组件。
您的堆栈跟踪显示如下:
- 您触发 Entity Framework 操作。
- Entity Framework 想要读取您的连接字符串。
- 它需要初始化您系统上安装的所有数据库提供程序。
- 它找到 Oracle 并尝试加载它。
- 它失败了,因为依赖项不支持 64 位。
您应该在确保没有其他软件依赖它之后完全卸载 Oracle Client,或者按照上面链接的答案中所述另外安装 64 位版本。
关于.net - 错误 "Could not load file"但我没有要求它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27555899/