Bagikan melalui


Kelas System.Runtime.CompilerServices.InternalsVisibleToAttribute

Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.

Atribut InternalsVisibleToAttribute menentukan bahwa jenis yang biasanya hanya terlihat dalam rakitan saat ini terlihat oleh rakitan tertentu.

Biasanya, jenis dan anggota dengan internal cakupan dalam C# atau Friend cakupan di Visual Basic hanya terlihat di rakitan tempat mereka ditentukan. Jenis dan anggota dengan protected internal cakupan (Protected Friend cakupan di Visual Basic) hanya terlihat di rakitan mereka sendiri atau ke jenis yang berasal dari kelas yang berisi mereka. Jenis dan anggota dengan private protected cakupan (Private Protected cakupan dalam Visual Basic) terlihat di kelas yang berisi atau dalam jenis yang berasal dari kelas yang berisi dalam rakitan saat ini

Atribut InternalsVisibleToAttribute membuat jenis dan anggota ini juga terlihat oleh jenis dalam rakitan tertentu, yang dikenal sebagai rakitan teman. Ini hanya berlaku untuk internal (Friend di Visual Basic), protected internal(Protected Friend di Visual Basic), dan private protected (Private Protected di Visual Basic) anggota, tetapi tidak private untuk anggota.

Catatan

Dalam kasus private protected anggota (Private Protected dalam Visual Basic), InternalsVisibleToAttribute atribut hanya memperluas aksesibilitas ke jenis yang berasal dari kelas anggota yang berisi.

Atribut diterapkan pada tingkat perakitan. Ini berarti bahwa file tersebut dapat disertakan di awal file kode sumber, atau dapat disertakan dalam file AssemblyInfo dalam proyek Visual Studio. Anda dapat menggunakan atribut untuk menentukan satu perakitan teman yang dapat mengakses jenis internal dan anggota rakitan saat ini. Anda dapat menentukan beberapa rakitan teman dengan dua cara. Mereka dapat muncul sebagai atribut tingkat rakitan individual, seperti yang diilustrasikan contoh berikut.

[assembly:InternalsVisibleTo("Friend1a")]
[assembly:InternalsVisibleTo("Friend1b")]
<assembly:InternalsVisibleTo("Friend1a")>
<assembly:InternalsVisibleTo("Friend1b")>

Mereka juga dapat muncul dengan tag terpisah InternalsVisibleToAttribute tetapi satu assembly kata kunci, seperti yang diilustrasikan contoh berikut.

[assembly:InternalsVisibleTo("Friend2a"), 
          InternalsVisibleTo("Friend2b")]
<Assembly:InternalsVisibleTo("Friend2a"), _
 Assembly:InternalsVisibleTo("Friend2b")>

Perakitan teman diidentifikasi oleh InternalsVisibleToAttribute konstruktor. Rakitan saat ini dan rakitan teman harus tidak ditandatangani, atau kedua rakitan harus ditandatangani dengan nama yang kuat.

Jika kedua rakitan tidak ditandatangani, assemblyName argumen terdiri dari nama perakitan teman, ditentukan tanpa jalur direktori atau ekstensi nama file.

Jika kedua rakitan ditandatangani dengan nama yang kuat, argumen ke InternalsVisibleToAttribute konstruktor harus terdiri dari nama rakitan tanpa jalur direktori atau ekstensi nama file, bersama dengan kunci publik lengkap (dan bukan token kunci publiknya). Untuk mendapatkan kunci publik lengkap rakitan bernama kuat, lihat bagian Dapatkan kunci publik lengkap nanti di artikel ini. Untuk informasi selengkapnya tentang menggunakan InternalsVisibleToAttribute dengan rakitan bernama kuat, lihat InternalsVisibleToAttribute konstruktor.

Jangan sertakan CultureInfonilai untuk bidang , Version, atau ProcessorArchitecture dalam argumen; pengkompilasi Visual Basic, C#, dan C++ memperlakukan ini sebagai kesalahan kompilator. Jika Anda menggunakan pengkompilasi yang tidak memperlakukannya sebagai kesalahan (seperti Perakit IL (ILAsm.exe)) dan rakitan diberi nama kuat, MethodAccessException pengecualian dilemparkan pertama kali perakitan teman yang ditentukan mengakses assembly yang berisi InternalsVisibleToAttribute atribut .

Untuk informasi selengkapnya tentang cara menggunakan atribut ini, lihat rakitan Teman dan rakitan teman C++.

Dapatkan kunci publik lengkap

Anda dapat menggunakan Alat Nama Kuat (Sn.exe) untuk mengambil kunci publik lengkap dari file kunci bernama kuat (.snk). Untuk melakukan ini, Anda melakukan langkah-langkah berikut:

  1. Ekstrak kunci publik dari file kunci bernama kuat ke file terpisah:

    Sn -p <snk_file> <outfile>

  2. Tampilkan kunci publik lengkap ke konsol:

    Sn -tp <outfile>

  3. Salin dan tempel nilai kunci publik lengkap ke dalam kode sumber Anda.

Mengkompilasi perakitan teman dengan C#

Jika Anda menggunakan pengkompilasi C# untuk mengkompilasi perakitan teman, Anda harus secara eksplisit menentukan nama file output (.exe atau .dll) dengan menggunakan opsi kompilator /out . Hal ini diperlukan karena pengompilasi belum membuat nama untuk perakitan yang sedang dibuatnya pada saat mengikat ke referensi eksternal. Opsi pengkompilasi /out bersifat opsional untuk pengkompilasi Visual Basic, dan opsi pengkompilasi -out atau -o yang sesuai tidak boleh digunakan saat mengkompilasi rakitan teman dengan pengkompilasi F#.

Mengkompilasi perakitan teman dengan C++

Di C++, untuk membuat anggota internal diaktifkan oleh atribut yang dapat diakses oleh InternalsVisibleToAttribute perakitan teman, Anda harus menggunakan as_friend atribut dalam arahan C++. Untuk informasi selengkapnya, lihat Rakitan Teman (C++).