Насколько я понимаю, для подписания сборки строгим именем используется какой-то хэш содержимого сборки и подписывается так, что если сборка будет изменена после подписания, она больше не должна работать. Однако я только что создал небольшую утилиту для добавления дополнительных ресурсов win32 в приложение после его сборки, и, насколько я могу судить, это не приводит к тому, что сборка, подписанная строгим именем, вообще перестает работать.
Я создал небольшое тестовое приложение, которое просто выводит имя сборки, подписывает его строгим именем, а затем добавляет к нему дополнительные значки. Ниже представлена программа:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("My name is " + Assembly.GetExecutingAssembly().GetName());
}
}
После того, как я изменю сборку, я все еще могу ее запустить, и она без проблем распечатает имя сборки с моим токеном открытого ключа:
My name is TestApp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cd4a03be895200fa
Теперь у меня вопрос: подписание строгого имени проверяет только некоторые части сборки, т.е. не хеширует ресурсы win32, или я совершенно не понимаю, как работает подпись строгого имени? Если моя сборка была изменена после подписания, разве она не должна перестать работать?