Подтвердить что ты не робот

Когда мы не должны создавать сильное имя Ассамблеи? Каковы недостатки "сильной названной сборки"?

У меня есть проект, т.е. library.exe. В этом я ссылался на сборку (logging.dll ver 1.0.3.0), и я дал этой сборке сильное имя.

Теперь предположим, что я изменил метод в logging.dll и сделал версию 1.0.4.0.

Теперь, когда я копирую/заменяю старую DLL этой новой, я получил исключение. Я знаю, что это исключение, потому что я изменил номер версии DLL. Поскольку это было сильное имя DLL, оно не разрешено, если я не восстановил library.exe.

То, что я хочу сказать выше, -

  • Используйте сильное имя со сборкой, только когда нам нужно добавить его в GAC.
  • Если у нас есть приложение, в котором отдельные сборки требуют обновления, не используйте сильные узлы с именами.

Правильно ли я с пунктами 1 и 2?

Когда сильные именные сборки не используются?

Каковы недостатки "сильной именованной сборки"?

4b9b3361

Ответ 1

Это действительно необходимо, если вы хотите разместить свои сборки в GAC, но это также помогает предотвратить вмешательство. Изменить код в сборке довольно легко, поэтому это дает плохим людям преимущество. Когда вы используете сильные имена сборок, вы подписываете их с помощью закрытого ключа, который у вас есть. Люди все еще могут изменить вашу сборку, но они не могут дать ему такое же сильное имя, потому что у них нет вашего личного ключа. В этом случае .Net отказывается от собрата. Когда они подписывают вашу сборку с помощью нового закрытого ключа,.Net все еще отказывается загружать его, поскольку личность сборки изменилась.

Существует несколько способов решения проблемы с версией. Когда ваше приложение хочет загрузить сборку v1, вы можете сказать, что она все равно выглядит voor v2. См. здесь для получения дополнительной информации. Другой вариант - не изменять версию сборки вообще, а изменять версию файла только для сборки. Для .Net сборки одинаковы, но вы и ваш установщик все еще можете видеть, какой из них более новый. См. AssemblyFileVersion.

Ответ 2

Оба правильные.
Вам не нужно StrongName, если впоследствии вы подписываете сборку, например, с помощью реального сертификата.
В моем oppinion сильное именование ничего не стоит, см. эту ссылку. Ну, вам это нужно для размещения сборки в GAC, но что это.