PIA установлен, но все еще получает ошибку взаимодействия

Я пытаюсь использовать пространство имен Microsoft.Office.Interop.xxxxxxx, но Visual Studio 2010 не предоставляет возможность «взаимодействия». У меня установлены PIA для office12 и office14, я включил их в «Ссылки» в обозревателе решений, но они не работают.

Код, с которым я пытаюсь вызвать пространство имен:

    using Excel = Microsoft.Office...;

После «Офиса» мне предоставляется только вариант «Ядро». Так это будет выглядеть так

    using Excel = Microsoft.Office.Core;

Это соответствует ссылке, которая была импортирована... но использование этого пространства имен не кажется полезным.

Мой вопрос: как мне получить параметр Microsoft.Office.Interop, который будет принят и отображен в intellisense?

Пример:

    using Excel = Microsoft.Office.Interop.Excel;

Получено сообщение об ошибке для «Interop» = «Тип или имя пространства имен «Interop» не существует в пространстве имен «Microsoft.Office» (вам не хватает ссылки на сборку?)

Сборка, которую я загрузил в обозревателе решений, называется «Библиотека объектов Microsoft Office 14.0» TypeLib версии 2.5. Путь сборки = "C:\Program Files\Common Files\Microsoft Shared\OFFICE14\MSO.DLL

Спасибо за любые предложения!


person Chris    schedule 14.07.2012    source источник


Ответы (1)


Вы выбрали не ту ссылку. Вместо этого используйте «Библиотека объектов Microsoft Excel 14.0».

Обратите внимание, что VS2010 поддерживает свойство Embed Interop Types для ссылки на сборку. Вы действительно хотите использовать это для приложения Office, PIA не требуется. Он автоматически устанавливается в True.

person Hans Passant    schedule 14.07.2012
comment
Ганс, спасибо за ответ. Я нашел ссылку Microsoft.Office.Interop.Excel в разделе «Добавить ссылки» .NET вместо COM, и она работает. - person Chris; 15.07.2012
comment
На самом деле я не мог найти его на вкладке COM. Знаете ли вы об источнике, который может объяснить упомянутые вами встроенные типы взаимодействия? - person Chris; 15.07.2012
comment
У тебя другая проблема. Если вы не видите его в списке на вкладке COM под именем, которое я вам дал, значит, на вашем компьютере не установлен Office, и вы не можете протестировать свой код. Просто PIA недостаточно хорош. Вам нужно это исправить. - person Hans Passant; 15.07.2012
comment
Embed Interop Types — это набор настроек, которые можно забыть. Единственное, что может пойти не так, — это попытка создать экземпляр COM-класса, имя которого заканчивается на Class, и это просто ошибка, которую можно исправить, исключив Class из имени. Лежащая в основе технология довольно глубока и позволяет вам прокатиться на американских горках по идентификации типов в .NET. Об этом есть видео на Channel9 с двумя парнями, которые заставили это работать. Полезные гиковские штучки и функции, которые делают .NET таким потрясающим: channel9.msdn.com/Blogs/Charles/ - person Hans Passant; 15.07.2012
comment
Ганс, мне не хватает репутации. еще не дал вам удар, но я ценю ваше время и ответ. - person Chris; 21.07.2012