RegAsm - Когда применима опция /codebase?
У меня есть COM-видимая DLL, написанная на C#, которую я хотел бы использовать в приложении VB6. У меня есть два основных варианта использования DLL, и мне интересно, когда /codebase
Опция применима и тогда, когда лучше зарегистрироваться в GAC.
Случаи применения:
DLL будет загружена на компьютер другого разработчика и должна быть доступна для IDE VB6 под
Project > References
менюDLL будет загружена на рабочие машины после выпуска приложения VB6.
Любая информация о надлежащем использовании /codebase
было бы полезно.
Благодарю.
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 (так называемый COM без регистрации) - лучший способ. Это позволяет вам хранить копию COM-сервера в том же каталоге, что и клиентская программа, и вам не нужно регистрировать ее вообще. Это, однако, требует работы с клиентской программой, что сложно, если у вас нет контроля над клиентским приложением или это приложение, с которым другие люди любят связываться. Приложения Microsoft Office, например.