Практическое руководство. Создание подписанных дружественных сборок
Обновлен: Ноябрь 2007
В этом примере показано использование дружественных сборок со сборками, имеющими строгие имена. Обе сборки должны иметь строгие имена. Хотя обе сборки этого примера используют одинаковые ключи, для двух сборок можно использовать различные ключи.
Для создания подписанной и дружественной сборок в Visual Studio
Откройте командную строку Visual Studio.
Используйте следующую последовательность команд в средстве строгих имен для формирования файла ключа и отображения его открытого ключа. Дополнительные сведения см. в разделе Средство строгих имен (Sn.exe).
Создайте ключ для строгого имени этого примера и сохраните его в файле FriendAssemblies.snk:
sn -k FriendAssemblies.snk
Извлеките открытый ключ из FriendAssemblies.snk и поместите его в FriendAssemblies.publickey:
sn -p FriendAssemblies.snk FriendAssemblies.publickey
Отобразите открытый ключ, сохраненный в файле FriendAssemblies.publickey:
sn -tp FriendAssemblies.publickey
Создайте новый файл Visual Basic, названный FriendAssembliesSnA.vb и содержащий следующий код. Код использует атрибут InternalsVisibleToAttribute для объявления FriendAssembliesSnB в качестве дружественной сборки.
Средство строгих имен создает новый открытый ключ его при каждом запуске. Таким образом, необходимо заменить открытый ключ следующего кода на только что созданный открытый ключ, как показано в следующем примере.
' FriendAssembliesSnA.vb. ' Compile with: ' Vbc.exe /target:library /keyfile:FriendAssemblies.snk FriendAssembliesSnA.vb Imports System.Runtime.CompilerServices ' Replace the value of PublicKey with your public key. <Assembly: InternalsVisibleTo("FriendAssembliesSnB, PublicKey=" & _ "002400000480000094000000060200000024000052534131000400000100010065364c" & _ "640a04ab7c4f06313779601ffb5d1284b381393ad2ede92b4bf91384bbfdb0f9b7ecf6" & _ "a387b7f9348fc59366987429db41ee061c1a808eb408c4ebd9aebd0d4b19b721121a0d" & _ "c66949f12878c4e2add5489f6208f49e67ddee4d0bb72fa6860a775b7e2232209efe8b" & _ "4566ea8bd9319a4b8feb3ef4911e7a7d2e957a92")> ' Friend class. Friend Class FriendAssembliesSnA Public Sub Test() MsgBox("Friend Assemblies Sample") End Sub End Class
Скомпилируйте и подпишите FriendAssembliesSnA.vb:
Vbc.exe /target:library /keyfile:FriendAssemblies.snk FriendAssembliesSnA.vb
Создайте новый файл Visual Basic, названный FriendAssembliesSnB.vb и содержащий следующий код. Поскольку FriendAssembliesA указывает FriendAssembliesB как дружественную сборку, код в FriendAssembliesB может получить доступ к Friend типам и членам из FriendAssembliesA.
' FriendAssembliesSnB.vb. ' Compile with: ' Vbc.exe /keyfile:FriendAssemblies.snk /r:FriendAssembliesSnA.dll FriendAssembliesSnB.vb Module FriendAssembliesSnB Public Sub Main() ' Access a Friend class. Dim friendTest As New FriendAssembliesSnA friendTest.Test() End Sub End Module
Скомпилируйте и подпишите FriendAssembliesSnB.vb:
Vbc.exe /keyfile:FriendAssemblies.snk /r:FriendAssembliesSnA.dll FriendAssembliesSnB.vb
Имя сборки, созданной компилятором, должно соответствовать имени дружественной сборки, передаваемой атрибуту InternalsVisibleToAttribute. Можно явно задать сборку, используя параметр компилятора /out. Дополнительные сведения см. в разделе /out (Visual Basic).
Запустите FriendAssembliesSnB.exe.
Программа отобразит окно сообщения, которое содержит строку "Friend Assemblies Sample".
Безопасность
Существуют сходства между атрибутом InternalsVisibleToAttribute и классом StrongNameIdentityPermission. Главное различие состоит в том, что StrongNameIdentityPermission может потребовать разрешения безопасности для выполнения определенного раздела кода, тогда как атрибут InternalsVisibleToAttribute контролирует видимость Friend типов и членов.
См. также
Задачи
Практическое руководство. Создание неподписанных дружественных сборок
Основные понятия
Дружественные сборки (Visual Basic)
Ссылки
Средство строгих имен (Sn.exe)