Как разрешается сборка в .NET? - PullRequest
10 голосов
/ 05 августа 2009

Как сборки разрешаются в .NET. Я имею в виду, как разрешается сборка с полностью определенным именем. Меня смущают токены открытого / закрытого ключа и сильные имена. Спасибо

РЕДАКТИРОВАТЬ: Я также читал о задержке подписания и тому подобное. Люди действительно используют это? (Кто-нибудь на самом деле использовал задержку подписи) Кто генерирует ключ для подписи сборки. Прошу прощения, если я задаю слишком много вопросов. Но я запутался во всем этом.

Ответы [ 3 ]

16 голосов
/ 06 августа 2009

Сильное именование используется вместе с «токеном открытого ключа» для создания сборки полное отображаемое имя (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.

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

2 голосов
/ 05 августа 2009

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

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

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

1 голос
/ 05 августа 2009

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

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

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

Просто добавьте к этому ответу еще одну ссылку для взлома, которая очень приятно подытожит вам все сильные имена с ключами: Сильные имена - ключи и т. Д.

Любые вопросы из этого, просто спросите!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...