我创建了一个在中开发的windows应用程序.NET 3.5在32位Windows 2008服务器中运行.在64位服务器上部署应用程序时,会显示错误"Microsoft.Jet.OLEDB.4.0"提供程序未在本地计算机上注册".

为了解决这个问题,我将项目的build属性改为X86,这样它将以32位模式构建,并在32位机器上重建项目.但是,同一个项目使用其他数据库驱动程序(DB2、SQL等)连接到其他数据库.因此,当我再次在64位操作系统中部署我的应用程序时,它抛出了一个异常"试图在32位平台上加载64位程序集"

我用的是微软.喷气式飞机OLEDB.4.0用于读取和写入Excel(.xls)的驱动程序

推荐答案

我找到了解决这个问题的办法.我在问题中描述的问题基本上是由于64位操作系统中的Microsoft.Jet.OLEDB.4.0 driver不兼容造成的.

因此,如果我们在64位服务器上使用Microsoft.Jet.OLEDB.4.0驱动程序,则必须强制应用程序内置在32位模式下(这是我在深入搜索这known issue时找到的答案),这会导致代码的其他部分崩溃.

幸运的是,现在微软已经发布了64位兼容的2010 Office System Driver,可以用来替代传统的Microsoft.Jet.OLEDB.4.0驱动程序.它既可以在32位服务器上运行,也可以在64位服务器上运行.我已经将它用于Excel文件操作,它在这两个环境中都工作得很好.但此驱动程序在BETA中.

你可以从Microsoft Access Database Engine 2010 Redistributable下载这个驱动程序

.net相关问答推荐

ZstdNet库的问题:Src大小不正确,异常

Azure管道-使用.NET 8 RC2 SDK生成C#项目失败

使用 Task.WhenAll 但需要跟踪每个单独的 Task 的成功

设置日志(log)文件名以在 Log4j 中包含当前日期

为什么 .Contains 慢?通过主键获取多个实体的最有效方法?

异步总是 WaitingForActivation

使用 IIS Express 托管网站(临时)

如何判断一个类型是否是简单类型?即持有一个单一的价值

如何在 C# 中将 HTML 转换为文本?

图像与位图类

C#:获得完整的桌面大小?

在 C# 中使用委托

在 .NET Core RC2 中构建 .exe 文件

何时使用抽象类?

有没有办法从方法返回匿名类型?

加载程序集、查找类和调用 Run() 方法的正确方法

CI服务器的比较?

作者主签名的时间戳发现了一个建链问题:UntrustedRoot: self-signed certificate in certificate chain

从 Visual Studio 2015 发布 - 允许不受信任的证书

MVVM 没有意义吗?