Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
В этой статье приводятся дополнительные замечания к справочной документации по этому API.
Атрибут InternalsVisibleToAttribute указывает, что типы, которые обычно видны только в текущей сборке, видны указанной сборке.
Обычно типы и члены с internal областью в C# или Friend области в Visual Basic отображаются только в сборке, в которой они определены. Типы и члены с protected internal областью (Protected Friend областью в Visual Basic) видны только в собственной сборке или в типах, производных от их содержащего класса. Типы и члены с private protected областью (Private Protected область в Visual Basic) отображаются в содержающем классе или в типах, производных от их содержащего класса в текущей сборке.
Атрибут InternalsVisibleToAttribute делает эти типы и члены также видимыми для типов в указанной сборке, которая называется дружественная сборка. Это относится только к internal элементам (Friend в Visual Basic), protected internal(Protected Friend в Visual Basic) и private protected (Private Protected в Visual Basic), но не к private элементам.
Замечание
В случае членов private protected (Private Protected в Visual Basic) атрибут InternalsVisibleToAttribute расширяет доступ только для типов, производных от содержащего класса этого члена.
Атрибут применяется на уровне сборки. Это означает, что его можно включить в начале файла исходного кода или включить в файл AssemblyInfo в проект Visual Studio. С помощью атрибута можно указать одну дружественную сборку, которая может получить доступ к внутренним типам и членам текущей сборки. Вы можете определить несколько дружественных сборок двумя способами. Они могут отображаться как отдельные атрибуты уровня сборки, как показано в следующем примере.
[assembly:InternalsVisibleTo("Friend1a")]
[assembly:InternalsVisibleTo("Friend1b")]
<assembly:InternalsVisibleTo("Friend1a")>
<assembly:InternalsVisibleTo("Friend1b")>
Они также могут отображаться с отдельными InternalsVisibleToAttribute тегами, но одним assembly ключевым словом, как показано в следующем примере.
[assembly:InternalsVisibleTo("Friend2a"),
InternalsVisibleTo("Friend2b")]
<Assembly:InternalsVisibleTo("Friend2a"), _
Assembly:InternalsVisibleTo("Friend2b")>
Другая сборка определяется конструктором InternalsVisibleToAttribute . Текущая сборка и дружественная сборка должны быть не подписаны, или обе сборки должны быть подписаны сильным именем.
Если обе сборки не подписаны, assemblyName аргумент состоит из имени дружественной сборки, указанной без пути к каталогу или расширения имени файла.
Если обе сборки подписаны строгим именем, аргумент InternalsVisibleToAttribute конструктору должен состоять из имени сборки без его пути к каталогу или расширения имени файла, а также полного открытого ключа (а не маркера открытого ключа). Чтобы получить полный открытый ключ сборки со строгим именем, см. раздел «Получить полный открытый ключ» далее в этой статье. Дополнительные сведения об использовании InternalsVisibleToAttribute с сборками с строгими именами см. в конструкторе InternalsVisibleToAttribute .
Не включайте значения для полей CultureInfo, Version или ProcessorArchitecture в аргумент; компиляторы Visual Basic, C# и C++ рассматривают это как ошибку компилятора. Если вы используете компилятор, который не обрабатывает его как ошибку (например, сборщик IL (ILAsm.exe)) и сборки имеют строгое имя, создается исключение при MethodAccessException первом обращении к указанной дружественной сборке, содержащей InternalsVisibleToAttribute атрибут.
Дополнительные сведения об использовании этого атрибута см. в разделе Сборки друзей и Сборки друзей C++.
Получение полного открытого ключа
Чтобы получить полный открытый ключ из файла с сильноключевым именем (.snk), можно использовать Инструмент строгого имени (Sn.exe). Для этого выполните следующие действия.
Извлеките открытый ключ из файла строго именованного ключа в отдельный файл.
Sn -p <snk_file> <outfile>Отображение полного открытого ключа в консоли:
Sn -tp <outfile>Скопируйте и вставьте полное значение открытого ключа в исходный код.
Скомпилируйте дружественную сборку с помощью C#
При использовании компилятора C# для компиляции дружественной сборки необходимо явно указать имя выходного файла (.exe или .dll) с помощью параметра компилятора /out . Это необходимо, так как компилятор еще не создал имя сборки, созданной в то время, когда она привязана к внешним ссылкам. Параметр компилятора /out необязателен для компилятора Visual Basic, а соответствующий параметр компилятора - out или -o не должен использоваться при компиляции дружественных сборок с помощью компилятора F#.
Скомпилируйте дружественную сборку с помощью C++
В C++, чтобы внутренние члены, которые включены атрибутом InternalsVisibleToAttribute, были доступны дружественной сборке, необходимо использовать атрибут as_friend в директиве C++. Дополнительные сведения см. в разделе "Дружественные сборки" (C++).