Поделиться через


Практическое руководство. Создание подписанных дружественных сборок

Обновлен: Ноябрь 2007

В этом примере показано использование дружественных сборок со сборками, имеющими строгие имена. Обе сборки должны иметь строгие имена. Хотя обе сборки этого примера используют одинаковые ключи, для двух сборок можно использовать различные ключи.

Для создания подписанной и дружественной сборок в Visual Studio

  1. Откройте командную строку Visual Studio.

  2. Используйте следующую последовательность команд в средстве строгих имен для формирования файла ключа и отображения его открытого ключа. Дополнительные сведения см. в разделе Средство строгих имен (Sn.exe).

    1. Создайте ключ для строгого имени этого примера и сохраните его в файле FriendAssemblies.snk:

      sn -k FriendAssemblies.snk

    2. Извлеките открытый ключ из FriendAssemblies.snk и поместите его в FriendAssemblies.publickey:

      sn -p FriendAssemblies.snk FriendAssemblies.publickey

    3. Отобразите открытый ключ, сохраненный в файле FriendAssemblies.publickey:

      sn -tp FriendAssemblies.publickey

  3. Создайте новый файл 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
    
  4. Скомпилируйте и подпишите FriendAssembliesSnA.vb:

    Vbc.exe /target:library /keyfile:FriendAssemblies.snk FriendAssembliesSnA.vb

  5. Создайте новый файл 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
    
  6. Скомпилируйте и подпишите FriendAssembliesSnB.vb:

    Vbc.exe /keyfile:FriendAssemblies.snk /r:FriendAssembliesSnA.dll FriendAssembliesSnB.vb

    Имя сборки, созданной компилятором, должно соответствовать имени дружественной сборки, передаваемой атрибуту InternalsVisibleToAttribute. Можно явно задать сборку, используя параметр компилятора /out. Дополнительные сведения см. в разделе /out (Visual Basic).

  7. Запустите FriendAssembliesSnB.exe.

    Программа отобразит окно сообщения, которое содержит строку "Friend Assemblies Sample".

Безопасность

Существуют сходства между атрибутом InternalsVisibleToAttribute и классом StrongNameIdentityPermission. Главное различие состоит в том, что StrongNameIdentityPermission может потребовать разрешения безопасности для выполнения определенного раздела кода, тогда как атрибут InternalsVisibleToAttribute контролирует видимость Friend типов и членов.

См. также

Задачи

Практическое руководство. Создание неподписанных дружественных сборок

Основные понятия

Дружественные сборки (Visual Basic)

Ссылки

InternalsVisibleToAttribute

/keyfile

Средство строгих имен (Sn.exe)

Другие ресурсы

Создание и использование сборок со строгими именами