Відповіді:
Дозвольте мені перерахувати переваги сильного називання вашої збірки спочатку:
Сильне іменування вашої збірки дозволяє включити свою збірку в кеш глобальної асамблеї (GAC). Таким чином, це дозволяє поділитися ним між кількома програмами.
Сильне називання гарантує унікальну назву для цієї збірки. Таким чином, ніхто більше не може використовувати одне і те ж ім’я збірки.
Сильна назва захищає лінійку версії збірки. Надійна назва може гарантувати, що ніхто не зможе виготовити наступну версію вашої збірки. Користувачі програм гарантують, що версія збірки, яку вони завантажують, надходить від того самого видавця, який створив версію, з якою була побудована програма.
Більш детально про чітке іменування від Microsoft йдеться у Strong-Named Assembly ( MSDN ).
Які речі неможливо зробити за допомогою звичайної збірки?
Оскільки всі дискусії, що розпочалися з підйому Nuget, пропонували повністю позбутися від сильних іменних збірок, моя компанія намагалася це і натрапила на значну зміну поведінки, що стосується налаштувань додатків:
Якщо ви використовуєте автоматичну програму або налаштування програми, що надаються користувачем VisualStudio (успадковуючи System.Configuration.ApplicationSettingsBase), то сильний з назвою EXE створить рівно 1 каталог всередині% LOCALAPPDATA% з ім'ям, наприклад, "YourApplication.exe_StrongName_kjsdfzsuzdfiuzgpoisdipozdiufzsuifеsіsfіdіsfеdіsfеdіsсfеdеszіуdіsfеdіsсfеdіsсfеdіsсfеdіsсfеdіsсfеdеszіуdіsfіdіsеsіsіуdіsfеdіsеsіsіdіsеsіsіdіsіsіdіsіsіdіsіsіdіsіsіdіsіdеsіsеdеs) розташований.
Але без чіткої назви розташування (= шлях) EXE буде використано для створення хеш-значення, яке вже відрізняється між DEBUG і збіркою RELEASE, створюючи багато каталогів всередині% LOCALAPPDATA%, названих як "YourApplication.exe_Url_dfg8778d6fs7g6d7f8g69sdf". Це робить його непридатним для розгортань ClickOnce, де каталог установки змінюється з кожним оновленням.
Я хотів би додати, що без сильного імені ви не можете використовувати перенаправлення прив’язки у конфігураційних файлах.
Це не вийде:
<dependentAssembly>
<assemblyIdentity name="MyAssembly.MyComponent" publicKeyToken="null" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
Потрібно мати маркер відкритого ключа
<dependentAssembly>
<assemblyIdentity name="MyAssembly.MyComponent" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
Лише приклад: я хотів би дати відповідь, роблячи більше уваги в галузі безпеки . У випадку, якщо ми створюємо збірки з вихідним кодом, які ми не хочемо використовувати повторно для третьої сторони, але хочемо, щоб він був перевіреним, ми можемо сильно підписати збірку і зробити внутрішні видимі лише для цих збірок із той же підпис.