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

RegAsm - Когда применяется опция/codebase?

У меня есть COM-видимая DLL, написанная на С#, которую я бы хотел использовать в приложении VB6. У меня есть два основных варианта использования DLL, и мне интересно, когда применима опция /codebase и когда лучше зарегистрироваться в GAC.


Использовать случаи:

  • DLL будет загружена на другой компьютер разработчиков и должна быть доступна для VB6 IDE в меню Project > References

  • DLL будет загружаться на производственные машины, когда приложение VB6 будет выпущено


Любая информация о соответствующем использовании /codebase будет полезна.

Спасибо.

4b9b3361

Ответ 1

Параметр/codebase является точным эквивалентом того, как вы использовали для регистрации COM-серверов с Regsvr32.exe. Вам нужно будет выбрать конкретное место для DLL, и путь к этому месту будет записан в реестр. У этого рискованного сервера COM есть сильная проблема с DLL Hell, поскольку их регистрация является машинной. При обновлении этой DLL будет затронуто любое приложение, использующее сервер. Не часто в хорошем смысле это очень часто нарушает приложение, которое не было перекомпилировано для использования обновленного сервера.

.NET улучшает это, сохраняя несколько версий DLL, выбранных их [AssemblyVersion]. Точный эквивалент кеша Windows рядом, GAC для управляемых сборок. Поэтому старые приложения, которые не были восстановлены, будут продолжать работать без изменений, все еще имея возможность использовать старую DLL. Это хороший способ.

Использование/codebase рекомендуется, если вы заняты разработкой сервера. Вы можете пропустить дополнительный необходимый шаг, который регистрирует DLL в GAC. Забыть сделать это больно, ваши изменения, похоже, не сработают, потому что тестовое приложение загрузит старую версию. Regasm покажет предупреждение, когда вы используете /codebase, предупреждая о потенциале DLL Hell, вы можете игнорировать его.

Когда вы позволяете Visual Studio позаботиться о регистрации на вкладке "Проект" > "Свойства" > "Создать", "Регистрация для COM-взаимодействия", вы получите точный эквивалент Regasm/codebase/tlb. Желательно сделать это так, потому что он также гарантирует, что старая версия сборки будет незарегистрирована, что позволит избежать загрязнения реестра. Но VS должен работать повышенным образом, чтобы он мог записываться в реестр.

Использование изолированного COM (aka "без регистрации COM" ) - лучший способ. Он позволяет хранить копию COM-сервера в том же каталоге, что и клиентская программа, и вам не нужно регистрировать его вообще. Это, однако, требует возиться с клиентской программой, сложно, если у вас нет никакого контроля над клиентским приложением или если это приложение, с которым другие люди любят общаться. Приложения Microsoft Office, например.