COM-взаимодействие, не выставляющее некоторые публичные классы - PullRequest
0 голосов
/ 02 мая 2018

У меня есть проект .NET, созданный с VS 2017. Выбран параметр «Сделать сборку видимой для COM», и сборка имеет строгое имя. Однако некоторые из моих общедоступных классов не имеют доступа к COM.

Например, предположим, что мое пространство имен aa.bb. В этом пространстве имен у меня есть различные публичные классы, такие как foo, bar и xyz. Я регистрируюсь с помощью regasm / codebase /tlb:test.tlb, и он говорит, что экспортировал tlb и успешно зарегистрирован.

Проверка реестра показывает, что выставлены только некоторые публичные классы, а наиболее важный публичный класс - нет. Например, он имеет aa.bb.foo и aa.bb.bar, но не aa.bb.xyz.

Я запустил regasm с /regfile:test.reg, и он не помещает туда ничего о классе xyz - только классы foo и bar. Я также попытался явно перечислить его как com видимый, выполнив это:

[ComVisible(true)]
public class xyz

однако это не имело значения.

Из нативного кода .NET, например ASP.NET c #, я могу сделать «используя aa.bb» а затем "xyz myObj = xyz.GetData ();" и это работает просто отлично. Каковы некоторые из причин и вещей, чтобы искать, почему этот класс не подвергается воздействию COM? Как я могу устранить эту проблему дальше, пожалуйста? Спасибо!

...