Строгое имя отложенной и полностью подписанной сборки идентично, если используется один и тот же открытый ключ.
Вот почему вам не нужно изменять (перестраивать) ссылку в exe после полной подписи dll.
Однако отложенная подписанная сборка не будет содержать подписи, подтверждающей, что она была подписана закрытым ключом (по уважительной причине: она не была подписана закрытым ключом).
Эта подпись не является частью полного имени, поэтому сборка по-прежнему будет соответствовать полному имени полностью подписанной сборки.
По умолчанию загрузка сборки отклоняется, если она подписана с задержкой. Не потому, что его полное имя не совпадает, а потому, что сборка не проходит проверку подписи.
Если вы использовали sn.exe для отключения проверки подписи, строгое имя dll будет принято без проверки соответствующей подписи. Это будет иметь место независимо от того, полностью ли подписан исполняемый файл, вызывающий dll, или нет.
Если вы не использовали sn.exe для отключения проверки, я бы ожидал, что exe вообще не запустится.
Если вы использовали sn.exe для отключения проверки всех сборок с использованием открытого ключа, я бы ожидал, что exe запустится и вызовет dll без проблем. Это делается с помощью:
sn.exe -Vr *,<publicKeyToken>
Если вы использовали sn.exe для отключения проверки для exe только при оставлении активной проверки для dll, я бы ожидал, что exe запустится, но не удастся вызвать dll. Это делается с помощью:
sn.exe -Vr <dllAssemblyName>,<publicKeyToken>
Чтобы убедиться, что проверка сборки не пропущена, используйте:
sn.exe -Vx
или использовать
sn.exe -Vu <dllAssemblyName>,<publicKeyToken>
для выборочного включения проверки, используя тот же синтаксис, что и с -Vr.
Существует как 32-битный, так и 64-битный sn.exe. Они влияют на 32- и 64-битные процессы соответственно. Я бы рекомендовал всегда запускать команды sn.exe в обоих, чтобы избежать сюрпризов.
person
Lars Møllebjerg
schedule
08.09.2017