Ошибка только в Azure - поставщик «Microsoft.ACE.OleDb.12.0» не зарегистрирован на локальном компьютере - PullRequest
3 голосов
/ 15 октября 2010

Я работаю с файлами MS Excel в своем веб-приложении, построенном в среде Azure.Я никогда не сталкиваюсь со следующей ошибкой, когда пытаюсь получить доступ к файлу Excel в моей структуре разработки.Но после развертывания в Azure в облаке я получаю это сообщение об ошибке.

Поставщик «Microsoft.ACE.OleDb.12.0» не зарегистрирован на локальном компьютере.

У меня сложилось впечатление, что ткань разработки для Azure является копией среды, которую вы ожидаете в облаке.

Что-то не так я здесь делаю?Поставщик ACE.OleDb отсутствует в Azure?

Ответы [ 4 ]

3 голосов
/ 15 октября 2010

Поставщик ACE.OLEDb не установлен на виртуальных машинах Azure.

В данном случае Fabric Fabric не выдаст ошибку просто из-за своей конструкции (которая, на мой взгляд, имеет недостатки в этой области),Поскольку Fabric работает как сборка .NET на вашем локальном компьютере, она имеет и использует доступ к вашему локальному GAC.В результате он может получить доступ ко всему, что вы установили, даже если эти библиотеки отсутствуют в образе GAC Azure.Таким образом, вы на самом деле не делаете ничего плохого с точки зрения использования Dev Fabric, просто DevFab в его текущем состоянии (SDK 1.2) не может помочь вам справиться с зависимостью сборки (и другими деталями) в облаке.

Что касается самой сборки, я ничего не знаю об этом провайдере, ЦАП или Jet Jetvers.Однако, предполагая, что они работают просто по ссылке на DLL, вы сможете сделать это в Azure, вам просто нужно будет явно указать эту ссылку.

1.) Убедитесь, что вы выбрали «Копировать локально» в DLL

2.) Проведите некоторое тестирование (возможно, удалите компонент с локального компьютера), чтобы убедиться, что код обращается кDLL внутри пути bin для приложения, в отличие от GAC.Стандартный алгоритм поиска DLL должен гарантировать это, но всегда лучше быть уверенным.

Короче говоря, если вы можете заставить эту работу работать локально без установленного компонента, используя только локальные DLL, вы можете копировать в Azure.В противном случае вы находитесь во власти облака, так сказать.

1 голос
/ 15 октября 2010

Это означает, что ЦАП не установлен (компонент доступа к данным).

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

Однако не знаю о Windows Azure.

0 голосов
/ 01 апреля 2017

Я тоже сегодня столкнулся с той же проблемой. Я использую стандартный план Azure, и доступ к серверу развертывания осуществляется через веб-портал Azure. Я не использую виртуальную машину Azure, потому что это более дорогой вариант.

Один из моих коллег предложил использовать 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 игнорируются пустые ячейки

Пожалуйста, убедитесь, что open sdk dll скопирован в local. В моем случае это была ссылка на dll, установленную на моем компьютере, в программных файлах. Поэтому, когда я загрузил в Azure, он выдал dll отсутствующую ошибку. Я должен был скопировать DLL отдельно в папку bin. Я думаю, что если мы попробуем использовать nuget для ссылки на dll, то эта проблема не появится, хотя я сам не пробовал.

Надеюсь, это поможет кому-то, кто ищет альтернативу Oledb, в случае, если установка dll на сервере невозможна.

0 голосов
/ 15 октября 2010

Матрица разработки максимально приближена к тому, что вы получаете в облаке, без необходимости запуска виртуальной машины на вашей машине разработки.

Когда вы запускаете код в среде разработки, он получает доступ ко всем компонентам, установленным на вашем компьютере. Машина, на которой ваш код работает в облаке, имеет минимальную установку. Это более или менее чистая установка Windows Server 2008 (IIS будет работать, если это веб-роль).

Любой код, развертываемый в Azure, должен быть в состоянии выполняться, если все, что вы сделали, - это построили проект, скопировали файлы сборки на новый компьютер и запустите его. Таким образом, если этот компонент, который вы пытаетесь использовать, представляет собой просто сборку .Net, измените ссылку так, чтобы для параметра «Копировать локальный» было установлено значение true, и это должно работать. Если для того, чтобы ваш код заработал, требуется, чтобы вы действительно что-то установили, я бы искал другой способ сделать что-либо.

...