Мне пришлось написать собственный кеш сборок ...
Вот основы того, как это работает, чтобы помочь другим, если им нужно реализовать собственный кеш сборок:
- Кеш - это папка с соответствующим классом оболочки в приложении.
- Метод установки сборки в кэш возвращает строку 'token' (имя, под которым установлена сборка), которую вызывающая сторона может сохранить и использовать для получения сборки позже.
- Метод извлечения сборки берет токен и возвращает объект, который инкапсулирует информацию из кэшированной сборки.
При установке сборки сначала сравните биты входящей сборки с битами каждой из уже кэшированных сборок и определите, установлена ли сборка уже (если все биты одинаковы, они, очевидно, должны делать то же самое). Если сборка уже установлена, верните имя ранее кэшированной сборки. Если он еще не установлен, разрешите установку нескольких версий, найдя доступный вариант имени сборки в папке кэша (например, assembly.dll, Assembly - (2) .dll, Assembly - (3) .dll и т. Д.). кэшируйте сборку в папке и возвращайте ее кэшированное имя вызывающей стороне.
Что касается безопасности и строгих имен, в моем приложении не имеет смысла проводить строгую проверку имени, поскольку это было бы то, что Брюс Пайетт называет «смягчение воздействия газонного гнома» (контрмера безопасности, которую злоумышленник может просто обойти. ). Если злоумышленник решит отравить собрание, он также получит доступ к месту, где будет храниться строгое имя, и сможет легко заменить его на свое строгое имя. В результате пользователь несет ответственность за использование сборок только из источников, которым он доверяет. Если пользователь устанавливает вредоносную сборку, это его вина, а не моя. Тем не менее, чтобы обеспечить немного больше защиты для пользователя, использование внешних сборок в моем приложении будет отключено по умолчанию. Однако для других приложений может иметь смысл внедрить строгую проверку имен в качестве дополнительного уровня безопасности.