Модульное тестирование с использованием Microsoft.Office.Interop dll на сервере сборки - PullRequest
2 голосов
/ 20 июля 2011

Я написал модульный тест. Тестируемый код ссылается на Microsoft.Office.Interop.Excel.dll.

На моем компьютере тест работает нормально, но на сервере сборки не проходит. Ошибка на линии, в которой создается приложение Excel:

var application = new Application { Visible = Visible };

Ошибка:

System.Runtime.InteropServices.COMException: 
Retrieving the COM class factory for component with CLSID 
{00024500-0000-0000-C000-000000000046} failed due to the following error:
80040154 Class not registered

Значит ли это, что мне нужно установить распространяемые первичные сборки взаимодействия на моем сервере сборки? И если да, нужно ли также устанавливать Excel на сервер сборки?

Edit: Microsoft.Office.Interop.Excel.dll включен в мое решение и на него есть ссылка.

Ответы [ 3 ]

3 голосов
/ 20 июля 2011

Да, похоже, вам нужно установить PIA :

Основные сборки взаимодействия для продуктов Microsoft Office также доступны в распространяемом пакете установщика Microsoft Windows:1006 *

Пакет для Microsoft Office 2003 доступен для загрузки из центра загрузки Microsoft (http://go.microsoft.com/fwlink/?LinkId=50479).

Пакет для системы Microsoft Office 2007 доступен для загрузки из центра загрузки Microsoft (http://go.microsoft.com/fwlink/?LinkId=72637).

И, для полноты, пакет Office 2010 находится здесь: (http://www.microsoft.com/download/en/details.aspx?id=3508)

3 голосов
/ 20 июля 2011

Если вы добавляете Microsoft.Office.Interop.Excel.dll к решению в папке библиотеки и ссылаетесь на сборку, то сборочная машина должна получить требуемую сборку при продвижении. В противном случае вы ссылаетесь на сборку, которая поставляется с установкой Excel. Кроме того, если вы попытаетесь распространить свое приложение, не помещая его в решение, любой, кто попытается запустить ваше приложение, на котором не установлен Excel, получит ошибки времени выполнения.

Или, конечно же, если вы не хотите распространять сборку, вы можете использовать метод try / catch для кода, вызывающего сборку Excel, а затем отобразить сообщение для пользователя, говорящее о необходимости установки Excel. .

Наконец, каждая версия Excel (2010, 2007 и т. Д.) Имеет разные номера версий. Это означает, что если вы используете сборку 2010 года, а у кого-то установлен Excel 2007, они получат ошибки времени выполнения. Ответ, который я использовал для этого, был отражением того, какая сборка используется в их среде.

1 голос
/ 20 июля 2011

Вам потребуется установить Office и основные сборки взаимодействия для этой версии или Visual Studio, чтобы это работало. Вы можете столкнуться с проблемами COM при работе в среде CI, и если вы можете реструктурировать свои тесты, чтобы избежать использования Office Interop, я настоятельно рекомендую это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...