2010-10-14 23 views
3

Je travaille avec des fichiers MS Excel dans mon application Web intégrée à l'environnement Azure. Je ne rencontre jamais d'erreur de suivi lorsque j'essaie d'accéder au fichier Excel sur mon environnement de développement. Mais une fois que je déploie Azure dans le cloud, j'obtiens ce message d'erreur.Erreur sur Azure uniquement - Le fournisseur 'Microsoft.ACE.OleDb.12.0' n'est pas enregistré sur la machine locale

Le fournisseur 'Microsoft.ACE.OleDb.12.0' n'est pas enregistré sur la machine locale.

J'étais sous l'impression que la structure de développement pour Azure est une réplique de l'environnement que vous attendez dans Cloud.

Y at-il quelque chose qui ne va pas ici? Le fournisseur ACE.OleDb n'est-il pas présent dans Azure?

Répondre

3

Le fournisseur ACE.OLEDb n'est pas installé sur les machines virtuelles Azure. Le développement de tissu ne vous donnera pas une erreur ici simplement par sa conception (qui à mon avis, est défectueuse dans ce domaine). Comme le Fabric s'exécute en tant qu'assemblage .NET sur votre machine locale, il dispose de l'accès à votre GAC local et en tire parti. Par conséquent, il peut accéder à tout ce que vous avez installé même lorsque ces bibliothèques ne sont pas présentes dans le GAC d'image Azure. Donc, vous ne faites vraiment rien de mal en termes d'utilisation du Dev Fabric, c'est juste que le DevFab dans son état actuel (SDK 1.2) ne peut pas vous aider à gérer la dépendance d'assemblage (et d'autres détails) dans le cloud. En ce qui concerne l'assemblage lui-même, je ne sais rien à propos de ce fournisseur, le DAC, ou les pilotes Jet. Cependant, en supposant qu'ils fonctionnent simplement par référence DLL, vous devriez être en mesure d'y arriver dans Azure, il vous suffira d'être explicite dans votre référence.

1.) Assurez-vous que vous avez sélectionné « Copier local » sur la DLL

2.) Faites des tests (peut-être retirer le composant de votre machine locale) pour assurer que le code accède à la DLL dans le bin chemin pour l'application, par opposition au GAC. L'algorithme de recherche DLL standard devrait garantir cela, mais toujours mieux d'être sûr. En résumé, si vous pouvez rendre ce travail local sans l'installation de ce composant, en utilisant uniquement des DLL locales, vous pouvez répliquer dans Azure. Sinon, vous êtes à la merci du nuage, pour ainsi dire.

+0

comment définir la copie locale sur dll? –

+0

Dans VisualStudio, recherchez la DLL sous le dossier de références et cliquez avec le bouton droit sur/Proprties (ou ALT + ENTRÉE). Dans l'écran des propriétés, il y a une option "Build Action". Réglez-le sur "copier local" ou "toujours copier" (oubliez le libellé actuel). Cela forcera csc à placer une copie du .dll dans le dossier bin quand il construit –

+0

et en faisant cela puis-je exécuter mon application sur azure ?? J'ai essayé d'ajouter la DLL manuellement. mais toujours pas en mesure d'utiliser la DLL –

1

Cela signifie que le DAC n'est pas installé (composant d'accès aux données).

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

Je ne sais pas sur Windows Azure cependant.

+0

Comment suis-je en contrôle de l'installation de quelque chose dans le nuage? cette erreur est vue une fois que je publie mon code sur Azure et non sur la machine locale. – SVI

+0

@SVI: Je ne connais pas Windows Azure, je ne peux pas vous répondre à ce sujet. Je peux seulement dire que je suis certain que c'est le MDAC pour Office 2007, parce que j'ai eu ce problème après la désinstallation et la réinstallation de Office 2010, et la réinstallation de MDAC 2007 a résolu le problème. Mais vous pouvez essayer http://exceldatareader.codeplex.com/, qui fonctionne sans JET. Et utiliser celui-ci pour l'écriture: http://epplus.codeplex.com/ –

0

La structure de développement est une approximation proche de ce que vous obtenez sur le cloud, sans avoir à exécuter une machine virtuelle sur votre machine de développement. Lorsque vous exécutez du code dans la structure de développement, elle a accès à tous les composants installés sur votre machine. La machine sur laquelle votre code s'exécute dans le cloud ne dispose que d'une installation minimale. C'est plus ou moins une installation propre de Windows Server 2008 (IIS sera en cours d'exécution s'il s'agit d'un rôle Web).

Tout code que vous déployez sur Azure doit pouvoir s'exécuter si tout ce que vous avez fait était de créer le projet, de copier les fichiers de construction sur une nouvelle machine et de l'exécuter. En tant que tel, si ce composant que vous essayez d'utiliser est juste un assembly .Net, changez la référence afin que "Copy Local" soit défini sur true et que cela fonctionne. Si pour que votre code fonctionne, vous devez installer quelque chose, je chercherais une autre façon de faire les choses.

0

J'ai également fait face au même problème aujourd'hui. J'utilise le plan standard d'Azure et l'accès au serveur de déploiement se fait via le portail Web Azure. Je n'utilise pas Azure VM car c'est une option plus coûteuse. Un de mes collègues a suggéré d'utiliser OpenSDK, en utilisant ce que je pourrais finalement faire la manipulation Excel sans utiliser les pilotes OleDb.

Une partie des ressources qui m'a aidé à accomplir ce que je voulais sont les suivants:

  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. reading Excel Open XML is ignoring blank cells

S'il vous plaît assurez-vous dll sdk ouvert est copié au niveau local . Dans mon cas, il faisait référence à la DLL installée dans mon ordinateur dans les fichiers de programme. Donc, quand j'ai téléchargé sur Azure, cela a donné une erreur de DLL. J'ai copié la DLL séparément dans le dossier bin. Je pense que si nous essayons de restreindre l'option de référencer la DLL, alors ce problème ne se présentera pas, mais je ne l'ai pas essayé moi-même.

Espérons que cela aide quelqu'un qui cherche une alternative à Oledb, dans le cas où l'installation de la DLL sur le serveur n'est pas possible.