Я удивлен, что PublicKeyToken
даже работает - на моей машине это заставляет меня использовать PublicKey
Причина, по которой вам нужен токен открытого ключа, заключается в том, что сборки со строгими именами могут быть помещены в GAC, который пользуется высоким доверием. Было бы дырой в безопасности, если какая-либо сборка под названием «MyTest» (которая потенциально не заслуживает доверия - например, элемент управления в браузере) могла бы вызвать внутреннюю часть сборки GACed; ему нужен открытый ключ, чтобы предотвратить этот тип взлома.
Это не должно нарушать работу оборудования, даже если сборка не найдена. Этот атрибут используется во время компиляции, а не во время выполнения.
Какой самый безопасный путь?
Если вы действительно беспокоитесь о том, что это может нарушить рабочий код, удалите атрибут во время сборки выпуска:
#if (DEBUG || TEST)
[assembly: InternalsVisibleTo("MyTest, PublicKeyToken=XxxxxYysakf")]
#endif
Если у вас есть несколько проектов, для которых нужен токен открытого ключа (и у вас есть одна пара ключей, которую вы должны), вы также можете определить файл, такой как AssemblyInfo.global.cs
, и добавить его в качестве связанного файла во все ваши проекты. :
class KeyTokens
{
public const string Global = ", PublicKeyToken=XxxxxYysakf";
}
Это упрощает (особенно если вам нужно использовать PublicKey
, который действительно long):
#if (DEBUG || TEST)
[assembly: InternalsVisibleTo("MyTest" + KeyTokens.Global)]
[assembly: InternalsVisibleTo("HisTest" + KeyTokens.Global)]
[assembly: InternalsVisibleTo("TheirTest" + KeyTokens.Global)]
#endif