Что следует учитывать при подписании строгого имени управляемого приложения?
Я хочу строго назвать управляемое приложение, которое ссылается на многие управляемые сборки и компоненты ActiveX и COM (написанные на C++) через взаимодействие. И поскольку сборка со строгим именем не может ссылаться на сборку со слабым именем, не могли бы вы сказать, к каким проблемам я должен быть готов, с чем вы столкнулись, особенно при работе с этими взаимодействиями ActiveX и COM?
Решение для этого приложения большое. Он состоит из 50+ проектов под управлением C#, Vb.net, нативного C++ и управляемого C++/CLI. Поэтому, чем больше информации, реальных историй вы дадите, тем лучше я смогу подготовиться и уберечь себя от головной боли.
Благодарю.
3 ответа
До сих пор я не сталкивался с какими-либо проблемами, связанными со строгими именами (также с использованием сборок взаимодействия COM). Если вы получаете стороннюю сборку, у которой нет строгого имени, вы можете подписать ее самостоятельно, что позволит вам сделать все сборки со строгими именами.
Конечно, создание строгой именованной сборки взаимодействия не защищает подлежащие изменению или замене базовые библиотеки DLL COM, поэтому "защита" от строгого имени не распространяется на компоненты COM, даже если сборка взаимодействия сильно по имени.
В действительности нет ничего проблемного, кроме надежного хранения файла.snk.
Помните, что каждая сторонняя сборка, которая будет использовать ваши сборки, будет иметь ключ из ваших сборок, упомянутых внутри зависимостей, и каждый раз, когда она будет загружать вашу сборку, она будет проверять, подписана ли загруженная сборка этим ключом. Это сделано для предотвращения неправильного размещения вашей сборки каким-либо вредоносным кодом.
Это означает, что если вы надежно не сохраните файл.snk, использованный для подписи самой ранней версии вашей сборки, вы не сможете отправлять новые версии, не заставляя пользователей повторно добавлять ссылки. Поэтому сохраните файл.snk и используйте один и тот же файл для каждой версии любой данной сборки. Неважно, используете ли вы разные файлы.snk для разных сборок или один для всех, так что достаточно одного.snk на компанию.
Смотрите этот вопрос и этот идеальный ответ для деталей на выше.