仅在Azure上出现错误 – “Microsoft.ACE.OleDb.12.0”提供程序未在本地计算机上注册

我正在使用Azure环境中构build的Web应用程序中的MS Excel文件。 当我尝试访问我的开发结构上的Excel文件时,我从来没有遇到以下错误。 但是,一旦我部署到云中的Azure,我收到此错误消息。

“Microsoft.ACE.OleDb.12.0”提供程序未在本地计算机上注册。

我的印象是,Azure的开发结构是您所期望的云环境的复制品。

我在这里做错了吗? ACE.OleDb提供程序是否不在Azure中?

ACE.OLEDb提供程序未安装在Azure虚拟机上。

开发结构不会简单地通过它的devise给你一个错误(在我看来,这个领域是有缺陷的)。 由于Fabric在本地计算机上作为.NET程序集运行,因此它可以访问本地GAC。 因此,即使这些库不在Azure映像GAC中,也可以访问您已安装的任何内容。 所以,在使用Dev Fabric时,你并没有做错任何事情,只是DevFab处于当前状态(SDK 1.2)无法帮助你处理云中的程序集依赖性(和其他细节)。

至于程序集本身,我对这个提供程序,DAC或Jet驱动程序一无所知。 但是,假设他们只是通过DLL引用工作,则应该能够在Azure中实现这一点,您只需在引用中明确指出这一点即可。

1.)确保你select了“复制本地”的DLL

2.)进行一些testing(也许从本地机器上移除组件),以确保代码正在访问应用程序的binpath内的DLL,而不是GAC。 标准的DLLsearchalgorithm应该保证这一点,但总是可以肯定的。

简而言之,如果您可以在没有安装该组件的情况下使用本地工作,则只需使用本地DLL即可在Azure中进行复制。 否则,你可以说是云的摆布。

这意味着DAC没有安装(数据访问组件)。

http://www.microsoft.com/downloads/en/details.aspx?familyid=7554f536-8c28-4598-9b72-ef94e038c891&displaylang=en

不过不知道Windows Azure。

开发结构与您在云上获得的近似值无关,无需在开发计算机上运行虚拟机。

在开发结构中运行代码时,可以访问计算机上安装的所有组件。 您的代码在云端运行的机器只有极less量的安装。 这或多或less是Windows Server 2008的干净安装(如果它是Webangular色,IIS将运行)。

如果您所做的只是构build项目,则将任何部署到Azure的代码都必须能够运行,将构build文件复制到新计算机并运行。 因此,如果你试图使用的这个组件只是一个.Net程序集,那么改变这个引用使它具有“Copy Local”设置为true,这应该可以工作。 如果让你的代码工作需要你真正的安装,我会寻找一种不同的方式来做事。

今天我也面临同样的问题。 我正在使用Azure的标准计划,通过Azure Web门户访问部署服务器。 我不使用Azure虚拟机,因为它是一个昂贵的选项。

我的一个同事build议使用OpenSDK,我最终可以使用Excel操作而不使用OleDb驱动程序。

帮助我完成我所需要的一些资源是:

  1. https://www.microsoft.com/en-us/download/details.aspx?id=30425
  2. https://msdn.microsoft.com/en-us/library/office/hh298534.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-15
  3. 阅读Excel Open XML将忽略空白单元格

请确保打开的sdk dll被复制到本地。 在我的情况下,它是在程序文件中引用我的电脑中安装的dll。 所以当我上传到Azure时,它给了一个DLL缺less的错误。 我已经将dll分别复制到bin文件夹。 我想如果我们尝试使用引用dll的nuget选项,那么这个问题就不会显示出来,“我自己也没有尝试过。

希望这有助于正在寻找替代Oledb的人,以防在服务器上安装dll是不可能的。