Как блок разрешен в.NET?

Xapian является другой опцией для Вас. Я услышал, что это масштабируется лучше, чем некоторые реализации Lucene.

10
задан Yves M. 13 November 2014 в 10:46
поделиться

3 ответа

Строгие имена используются вместе с «токеном открытого ключа» для создания полного отображаемого имени сборки ( mscorlib, версия = 2.0.0.0, культура = нейтральный, PublicKeyToken = b4778, ..... ). Это позволяет нам иметь несколько версий одной и той же сборки бок о бок в одном каталоге приложения.

Токен открытого ключа (и, следовательно, метод именования строк) также позволяет загрузчику .NET определять, не вмешался ли кто-нибудь в ваш содержимое сборки с тех пор, как вы ее распространили. Это верно, потому что когда вы подписываете сборку своим «личным токеном», компилятор сгенерирует хэш-значение, которое он вставит в метаданные сборки, которые описывают публичную часть вашего «частного токена». Затем загрузчик может использовать это значение, чтобы определить, была ли ваша сборка изменена.

Что касается разрешения сборок, необходимо учитывать несколько основных моментов:

  • Проверка Загрузчик пытается найти сборки, используя базовую технику «зондирования» каталогов. Это означает, что он попытается найти " MyAssembly.dll " (например) в каталоге запуска приложения, если не там, то в подкаталогах ниже этого. Если зондирование не может найти « MyAssembly.dll », то запускается событие AssemblyResolve AssemblyResolve для AppDomain .

  • Конфигурация компьютера / пользователя / системы ] machine.config , user.config и system.config - это файлы конфигурации, хранящиеся локально в системе, которые можно использовать для изменения поведения распознавателя сборок. на уровне «машина», «пользователь» или «система».

  • Политика издателя Можно использовать XML-токен « » в файле конфигурации вашего приложения (например, « MyApp.exe.config »), чтобы указать преобразователю на определенную версию сборку или загрузить сборку из другого места.

  • Пользовательское разрешение Обработайте событие « AssemblyResolve » для AppDomain . Это событие возникает всякий раз, когда сборка не может быть разрешена с помощью "традиционных" методов

Наименее сложным механизмом является обработка события "AssemblyResolve".

Подводя итог, распознаватель просматривает текущий каталог или глобальный каталог. кэш сборки, обрабатывает политику и, наконец, разрешает настраиваемое разрешение.

16
ответ дан 3 December 2019 в 20:06
поделиться

Разрешение сборок может включать в себя несколько шагов в зависимости от того, где сборка, которую он пытается загрузить, находится (GAC, базовая папка приложения, подпапки или другая папка, отличная от вашей базовой папки приложения) .

Это хорошая статья о том, как указать, где .Net будет искать ваши сборки. Статья MSDN

Если вы хотите, чтобы среда выполнения разрешала сборку, которая не хранится в базовой папке вашего приложения или в GAC, вам нужно будет зарегистрироваться для события AppDomain, которое возникает, когда сборка не может быть найдена. . Затем вы отреагируете на это событие, проверив, существует ли файл в другом месте, а затем верните его с помощью Assembly.LoadFrom (thePath).

Чтобы добавить к этому ответу, приведу эту ссылку для взлома, которая должна подытожить все сильное именование с ключами, очень хорошо для вас: Strong Naming - ключи и т.д ..

Если у вас есть вопросы, просто задавайте!

1
ответ дан 3 December 2019 в 20:06
поделиться

Следующая статья о MSDN должна вам помочь:

http://msdn.microsoft.com/en-us/library/yx7xezcf (VS.71) .aspx

Разрешение сборки в .NET может быть довольно сложным, поскольку сборки могут располагаться в разных местах, включая GAC, совместно с выполняющейся сборкой, теневое копирование и т. Д. Общий процесс называется процесс Fusion и обеспечивает соблюдение надлежащих мер безопасности при загрузке сборок.

2
ответ дан 3 December 2019 в 20:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: