У меня проблема с выставлением сборки .NET в COM. Кажется, что я, должно быть, пропускаю какой-то базовый шаг, потому что я думаю, что следовал всем учебникам и документации, которые нашел, а также здравому смыслу, но все же, когда делаю (в тестовом VBScript):
Set o = CreateObject("MyLib.MyClass")
Он продолжает говорить, что объект не может быть создан.
Вот шаги, которые я сделал:
- У меня есть простой класс с одним методом, без атрибутов.
- Класс находится в библиотеке классов, в которой в Visual Studio установлен флажок "Сделать сборку видимой для COM" .
- Библиотека классов подписана.
- DLL регистрируется через RegAsm.exe с параметром / codebase (я не хочу / не могу добавить DLL в GAC).
Просто чтобы быть уверенным, я попытался скопировать библиотеку в тот же каталог, что и тестовый VBScript, но это не помогло.
Редактировать: Я должен был упомянуть, что я могу создать экземпляр класса в COM, если я помещу DLL в GAC.
Редактировать: Решено. У меня нет полного объяснения, но в конце концов я обнаружил, что это было вызвано с помощью:
% Windir% \ Microsoft.NET \ Framework \ v2.0.50727 \ regasm.exe
а не 64-битная версия:
% Windir% \ Microsoft.NET \ Framework64 \ v2.0.50727 \ RegAsm.exe
Я сравнил сгенерированные ключи реестра двух RegAsm, и они были одинаковыми. Так что догадываясь, что они генерируют что-то еще, а не ключи реестра.