Excel COM Interop - Tlbimp против основного WrapperTool - PullRequest
5 голосов
/ 07 июня 2010

Я пытаюсь добавить библиотеку объектов ActiveX Microsoft Excel 11.0 в свой проект .NET. Он отлично работает на моем компьютере, но когда я проверяю свой код, он не работает на моем коллеге. Исправил это на своем, и он сломал мой. После добавления пространства имен на наших машинах различаются.

Оказывается, разница в том, что когда я добавляю ссылку, она использует tlbimp в качестве WrapperTool, но для него это делает ссылку primary.

Как мне заставить это работать для нас обоих одинаково? Его машине не нравится tlbimp импортированное взаимодействие, а моему не нравится primary взаимодействие.

Ответы [ 2 ]

4 голосов
/ 07 июля 2010

у нас была похожая проблема, и опция "tlbimp" работала на всех компьютерах.

Мое (несовершенное) понимание таково: .NET использует сборки-оболочки для доступа к COM-компонентам. Если вы укажете «основной», вы используете существующую, предварительно сгенерированную «первичную сборку взаимодействия». Согласно http://msdn.microsoft.com/en-us/library/hfac4fky.aspx, «первичные сборки взаимодействия предоставляются тем же издателем, что и библиотека типов, которую они описывают». Если использование «основной» не работает для вас, эта сборка не существует на вашем компьютере.

По умолчанию это "tlbimp" и (из того, что я собрал) должно нормально работать. Если это не работает на компьютере вашего коллеги, сообщение об ошибке будет полезно. Сообщалось об ошибках для VS2003 (найдите статью базы знаний «При добавлении ссылки на COM-объект в Visual Studio .NET после установки пакета обновления 2 (SP2) для Windows XP» появляется сообщение об ошибке »), но я не знаю, применимо ли это к текущим версиям VS.

Если вы не можете выполнить эту работу, я бы посоветовал вам прочитать больше о «Первичных сборках взаимодействия» и попытаться найти, где находится основная сборка взаимодействия для Excel на компьютере вашего коллеги, а затем скопировать его на машины всех разработчики.

Надеюсь, это поможет.

0 голосов
/ 20 июня 2014

Я смог решить эту проблему путем редактирования реестра:

HKEY_CLASSES_ROOT \ TypeLib {2DF8D04C-5BFA-101B-BDE5-00AA0044DE52} \ 2,4

Это существовало, и я добавил следующее строковое значение:

Имя: PrimaryInteropAssemblyName
Значение: office, версия = 12.0.0.0, культура = нейтральная, PublicKeyToken = 71e9bce111e9429c

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