Подтвердить что ты не робот

Что делает "Регистрация для COM-взаимодействия" на самом деле?

Что конкретно делает опция VS-проекта "Регистрация для COM-взаимодействия"? Потому что, когда я создаю свою библиотеку с включенной опцией, я могу вызвать CreateObject в своей библиотеке из VBScript. Но если я буду строить без этого, а затем запустить regasm вручную, то CreateObject завершится с ошибкой. Поэтому мне интересно - что делает VS2010, что я не делаю?

4b9b3361

Ответ 1

Он делает то же самое, что и запустить Regasm.exe с параметрами /tlb и/codebase. Опция /codebase, вероятно, та, которую вы забыли. Regasm любит предполагать, что вы поместили DLL в GAC и генерируете предупреждение, когда вы этого не делаете. GAC действительно очень хороший способ избежать DLL Hell, всегда проблема COM. Но не подходит для вашей машины-разработчика, вы не хотите загрязнять GAC при разработке и тестировании кода. Это имеет значение только на вашей пользовательской машине, которая может быть подвержена нескольким версиям.

Использование неправильной версии Regasm.exe на 64-битной машине - еще один способ попасть в проблему, на вашем компьютере обычно есть 4 версии. Не забудьте выделить 32-битные и 64-разрядные версии (c:\windows\microsoft\framework vs framework64), они пишут разные ключи реестра. Вы хотите выбрать тот, который совместим с клиентским приложением. Использование обоих тоже хорошо,.NET-код может работать в любом режиме, но довольно необычный. И различайте версии v2.0.50727 (от .NET 2.0 до 3.5SP1) и версии версии 4.0. Выбор правильной командной строки Visual Studio - это половина битвы.