我正在使用Azure环境中构建的Web应用程序中的MS Excel文件。当我尝试访问开发结构上的excel文件时,我从未遇到过以下错误。 但是,一旦我在云中部署到Azure,我就会收到此错误消息。
“Microsoft.ACE.OleDb.12.0”提供程序未在本地计算机上注册。
我的印象是,Azure的开发结构是您在云中所期望的环境的复制品。
我在这里做错了吗? ACE.OleDb提供程序是否不在Azure中?
答案 0 :(得分:3)
Azure VM上未安装ACE.OLEDb提供程序。
开发结构不会仅仅通过其设计(在我看来,在这个领域存在缺陷)给出错误。由于Fabric在本地计算机上作为.NET程序集运行,因此它具有并利用对本地GAC的访问权限。因此,即使Azure图像GAC中不存在这些库,它也可以访问您已安装的任何内容。所以,你在使用Dev Fabric方面并没有做任何错误,只是当前状态下的DevFab(SDK 1.2)无法帮助你处理云中的程序集依赖(和其他细节)。
至于程序集本身,我对该提供程序,DAC或Jet驱动程序一无所知。但是,假设它们只是通过DLL引用工作,您应该能够在Azure中实现这一点,您只需要在您的引用中明确指出。
1.确保您已在DLL上选择“复制本地”
2.。)进行一些测试(可能从本地计算机中删除组件)以确保代码访问应用程序的bin路径中的DLL,而不是GAC。标准的DLL搜索算法应该保证这一点,但总是更好。
简而言之,如果您可以在没有安装该组件的情况下使本地工作,只使用本地DLL,则可以在Azure中进行复制。否则,你可能会受到云的支配。
答案 1 :(得分:1)
这意味着未安装DAC(数据访问组件)。
然而,不了解Windows Azure。
答案 2 :(得分:0)
开发结构与您在云上获得的结构非常接近,无需在开发计算机上运行虚拟机。
在开发结构中运行代码时,它可以访问计算机上安装的所有组件。您的代码在云中运行的计算机上只有非常少的安装。它或多或少是Windows Server 2008的全新安装(如果它是一个Web角色,IIS将运行)。
如果您所做的只是构建项目,将构建文件复制到新计算机并运行它,那么部署到Azure的任何代码都需要能够运行。因此,如果您尝试使用的此组件只是一个.Net程序集,请更改引用,以便将“Copy Local”设置为true,这应该可行。如果让你的代码工作需要你实际安装一些东西,我会寻找一种不同的做事方式。
答案 3 :(得分:0)
我今天也遇到了同样的问题。我正在使用Azure的标准计划,并且通过Azure Web门户访问部署服务器。我没有使用Azure VM,因为它是一个更昂贵的选择。
我的一位同事建议使用OpenSDK,我最终可以在不使用OleDb驱动程序的情况下进行Excel操作。
帮助我完成我想要的一些资源是:
请确保将open sdk dll复制到本地。在我的例子中,它是在程序文件中引用我的计算机中安装的DLL。因此,当我上传到Azure时,它会丢失一个dll错误。我已将dll分别复制到bin文件夹。我想如果我们尝试引用dll的nuget选项,那么这个问题就不会出现了,但我自己并没有尝试过。
希望这可以帮助那些正在寻找替代Oledb的人,以防无法在服务器上安装dll。