Сильное именование используется вместе с «токеном открытого ключа» для создания сборки полное отображаемое имя (mscorlib, version=2.0.0.0, Culture=neutral, PublicKeyToken=b4778,.....
).Это позволяет нам иметь несколько версий одной и той же сборки бок о бок в одном каталоге приложения.
Токен открытого ключа (и, следовательно, метод именования строк) также позволяет загрузчику .NET определять, есть ли у кого-либовмешивался в содержимое вашей сборки, так как вы распространяли его.Это верно, потому что, когда вы подписываете сборку своим «личным токеном», компилятор генерирует хеш-значение, которое он встраивает в метаданные сборки, которые описывают открытую часть вашего «частного токена».Затем загрузчик может использовать это значение, чтобы определить, была ли изменена ваша сборка.
Что касается разрешения сборок, необходимо учитывать несколько основных моментов:
Зондирование Загрузчик пытается найти сборки, используя базовую технику «зондирования» каталогов.Это означает, что он попытается найти «MyAssembly.dll
» (например) в каталоге запуска приложения, если его там нет, то в подкаталогах ниже этого.Если при обнаружении не удается обнаружить «MyAssembly.dll
», то запускается событие AppDomain
AssemblyResolve
.
Конфигурация машины / пользователя / системы machine.config
, user.config
и system.config
- это файлы конфигурации, хранящиеся локально в системе, которые можно использовать для изменения поведения распознавателя сборки в настройках "машина", "пользователь" или "система".
Политика издателя Можно использовать XML-токен "<assemblyIdentity>
" в файле конфигурации вашего приложения (например, "MyApp.exe.config
"), чтобы указать на преобразователь наопределенная версия сборки или загрузка сборки из другого места.
Пользовательское разрешение Обработка события "AssemblyResolve
" AppDomain
.Это событие возникает всякий раз, когда сборка не может быть разрешена с помощью «традиционных» методов
На сегодняшний день наименее сложным механизмом является обработка события AssemblyResolve.
КомуИтак, преобразователь просматривает текущий каталог или глобальный кэш сборок, обрабатывает политику и, наконец, разрешает пользовательское разрешение.