Библиотека классов C # не будет регистрироваться для COM - PullRequest
2 голосов
/ 31 марта 2010

Я пытаюсь получить доступ к библиотеке классов .NET в Microsoft Excel. Для этого я знаю, что библиотека классов .NET должна быть зарегистрирована в COM. Поэтому я попытался перейти к информации о сборке и установить для параметра COM Visible значение true. Затем на вкладке сборки я установил Register for COM Interop для true. Я проверил файл AssemblyInfo.cs, и он содержит [assembly: ComVisible(true)]. Но по какой-то причине, когда я пытаюсь добавить ссылку на Class Lib в Excel, пространство имен не появляется в списке. Я сделал быструю проверку библиотеки классов, в которой ничего не было, и сделал то же самое (установил COM Vis = true и Register For COM Interop = true), и он действительно появился в списке доступных ссылок. Я не могу понять, в чем разница между двумя классами. Я не уверен, действительно ли мой класс регистрируется для COM-взаимодействия или нет. Кто-нибудь знает, что я могу сделать, чтобы это исправить ???

Добавлено: я пытался зарегистрировать класс вручную, используя RegAsm, но получаю следующее сообщение ... "RegAsm : warning RA0000 : No types were registered"

Добавлено: я проверил выходной каталог своего проекта и заметил, что при создании проекта файл библиотеки типов (* .tlb) не создается. Я убедился, что у каждого класса есть свой атрибут GUID. Проект не содержит структур, интерфейсов или перечислений.

Ответы [ 2 ]

4 голосов
/ 01 апреля 2010

Хорошо, я нашел проблему, которая была вызвана двумя проблемами. Когда я собирал проект в Visual Studio, я заметил, что файл библиотеки типов не создается. Я обнаружил предупреждение, в котором говорилось, что не было найдено классов, которые можно было бы зарегистрировать, поэтому регистрация не проводилась. Пока я копал немного глубже, я нашел эти два правила. 1. Статические классы не будут регистрироваться в COM. 2. Все классы должны иметь открытый конструктор по умолчанию для создания экземпляра через COM

Из MSDN. Типы должны иметь открытый конструктор по умолчанию для создания экземпляра через COM. Управляемые открытые типы видны для COM. Однако без общедоступного конструктора по умолчанию (конструктор без аргументов) COM-клиенты не могут создать экземпляр типа. COM-клиенты могут по-прежнему использовать тип, если тип создается другим способом, а экземпляр возвращается COM-клиенту. Вы можете включить перегруженные конструкторы, которые принимают различные аргументы для этих типов. Однако конструкторы, которые принимают аргументы, могут вызываться только из управляемого (.NET) кода.

0 голосов
/ 31 марта 2010

Проверка безопасности для надстроек в Excel. Также убедитесь, что вы записываете все в файл, MS Office имеет тенденцию использовать любые исключения, возникающие при запуске надстройки.

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