Данные С# Значение PublicKeyToken

Вопрос:Если я открою Resource.resx из моей папки С# проекта, я увидел что-то вроде этого: ..Resourcespicture.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a Что такое PublicKeyToken и какое значение мне следует назначать? Лучший ответ: .NET работает с сборками; каждый EXE или DLL файл считается сборкой. Для того, чтобы сборка была распознана глобально на машине

Вопрос:

Если я открою Resource.resx из моей папки С# проекта, я увидел что-то вроде этого:

<data name=»picture» type=»System.Resources.ResXFileRef, System.Windows.Forms»> <value>..Resourcespicture.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> </data>

Что такое PublicKeyToken и какое значение мне следует назначать?

Лучший ответ:

.NET работает с сборками; каждый EXE или DLL файл считается сборкой.

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

Вы не можете разместить только какую-либо сборку в GAC, так как по соображениям безопасности размещение сборки там требует строгого ввода, подписанного aka. Не попадет сюда в процесс подписания сборки, поскольку это не имеет значения, но часть процесса подписания получает открытый ключ. Затем вы можете использовать этот же ключ для любого количества сборок, поэтому в сборке может быть один ключ, но один ключ может быть разделен множеством разных сборок.

Когда .NET загружает строго типизированную сборку, он должен получить три параметра:

  • Название сборки.
  • Сборочная версия.
  • Открытый ключ сборки.

При любом из этих недостающих или неправильных,.NET будет вызывать ошибку, что он не может найти сборку.

Теперь для вашего последнего вопроса: с учетом известного имени сборщика, как найти его токен открытого ключа?

Ну, все системные сборки до 4.0 можно найти с помощью Windows Button + R, затем набрав %windir%assembly и ENTER. Вам будет представлена ​​полная таблица установленных сборок с именем, версией и ключом. Например, вы можете увидеть, что ключ, размещенный в исходном вопросе, действительно принадлежит сборке System.Drawing.

Из-за нарушения изменений в структуре 4.0 местоположение GAC для своих сборок изменилось на %windir%Microsoft.NETassembly, и оно больше не отображается в дружественном списке, а скорее как папки и файлы: каждая сборка в новом GAC имеет свои собственные и от его имени вы можете извлечь общедоступный токен. Например, System.Web содержит следующую подпапку:

v4.0_4.0.0.0__b03f5f7f11d50a3a

Итак, это означает, что ключ b03f5f7f11d50a3a и что вы должны поместить в файл .resx, если у вас есть ссылка на сборку System.Web. (Обратите внимание, что это то же самое, что и ключ System.Drawing, но здесь это не очень важно)

Ответ №1

см. this

Корпорация Майкрософт решает проблему “разблокировки открытого ключа”, используя хэш открытый ключ общедоступной сборки. Эти хеши упоминаются как токены открытого ключа и низкие 8 байтов SHA1-хэша открытый ключ общедоступной сборки. Хеши SHA1 составляют 160 бит (20 байт), а верхние 12 байтов хэша просто отбрасываются в этот алгоритм.

Ответ №2

Если вы посмотрите на свойства этой ссылки, вы заметите, что по умолчанию для параметра “Копировать локальную” установлено значение “Истина”.

Оцените статью
Добавить комментарий