Assembly teman
Perakitan teman adalah perakitan yang dapat mengakses jenis dan anggota internal (C#) atau Teman (Visual Basic) perakitan lain. Jika Anda menambahkan atribut assembly ke AssemblyA untuk mengidentifikasi AssemblyB sebagai perakitan teman, Anda tidak perlu lagi menandai jenis dan anggota di AssemblyA sebagai publik agar mereka dapat diakses oleh AssemblyB. Hal ini sangat nyaman dalam skenario berikut:
Selama pengujian unit, ketika kode pengujian berjalan dalam perakitan terpisah tetapi memerlukan akses ke anggota dalam perakitan yang sedang diuji yang ditandai sebagai
internal
dalam C# atauFriend
dalam Visual Basic.Saat mengembangkan pustaka kelas dan penambahan ke pustaka yang disimpan dalam perakitan terpisah tetapi memerlukan akses ke anggota dalam perakitan yang sudah ada yang ditandai sebagai
internal
di C# atauFriend
di Visual Basic.
Keterangan
Anda dapat menggunakan atribut InternalsVisibleToAttribute untuk mengidentifikasi satu atau beberapa kumpulan teman untuk kumpulan tertentu. Contoh berikut menggunakan InternalsVisibleToAttribute atribut di AssemblyA dan menentukan assembly AssemblyB sebagai perakitan teman. Hal ini memberi perakitan PerakitanB akses ke semua jenis dan anggota di Perakitan A yang ditandai sebagai internal
di C# atau Friend
di Visual Basic.
Catatan
Saat Anda mengkompilasi rakitan seperti AssemblyB yang akan mengakses jenis internal atau anggota internal rakitan lain seperti AssemblyA, 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. Untuk informasi selengkapnya, lihat OutputAssembly (C#) atau -out (Visual Basic).
using System.Runtime.CompilerServices;
using System;
[assembly: InternalsVisibleTo("AssemblyB")]
// The class is internal by default.
class FriendClass
{
public void Test()
{
Console.WriteLine("Sample Class");
}
}
// Public class that has an internal method.
public class ClassWithFriendMethod
{
internal void Test()
{
Console.WriteLine("Sample Method");
}
}
Imports System.Runtime.CompilerServices
<Assembly: InternalsVisibleTo("AssemblyB")>
' Friend class.
Friend Class FriendClass
Public Sub Test()
Console.WriteLine("Sample Class")
End Sub
End Class
' Public class with a Friend method.
Public Class ClassWithFriendMethod
Friend Sub Test()
Console.WriteLine("Sample Method")
End Sub
End Class
Hanya perakitan yang Anda tentukan secara eksplisit sebagai teman yang dapat mengakses jenis dan anggota internal
(C#) atau Friend
(Visual Basic). Misalnya, jika Perakitan B adalah teman dari Perakitan A dan Perakitan C mereferensikan Perakitan B, Perakitan C tidak memiliki akses ke jenis internal
(C#) atau Friend
(Visual Basic) di Perakitan A.
Pengompilasi melakukan beberapa validasi dasar dari nama perakitan teman yang diteruskan ke atribut InternalsVisibleToAttribute. Jika Perakitan A menyatakan PerakitanB sebagai perakitan teman, aturan validasinya adalah sebagai berikut:
Jika Perakitan A memiliki nama yang kuat, Perakitan B juga harus memiliki nama yang kuat. Nama perakitan teman yang diteruskan ke atribut harus terdiri dari nama perakitan dan kunci umum dari kunci bernama kuat yang digunakan untuk menandatangani Perakitan B.
Nama perakitan teman yang diteruskan ke atribut InternalsVisibleToAttribute tidak boleh berupa nama kuat dari Perakitan B. Jangan sertakan versi perakitan, budaya, arsitektur, atau token kunci umum.
Jika Perakitan A tidak memiliki nama yang kuat, nama perakitan teman hanya boleh terdiri dari nama perakitan. Untuk selengkapnya, lihat Cara: Membuat kumpulan teman yang tidak bertanda tangan.
Jika Perakitan B bernama kuat, Anda harus menentukan kunci nama kuat untuk Perakitan B dengan menggunakan pengaturan proyek atau opsi pengompilasi baris perintah
/keyfile
. Untuk informasi selengkapnya, lihat Cara: Membuat kumpulan teman yang ditandatangani.
Kelas StrongNameIdentityPermission juga menyediakan kemampuan untuk berbagi jenis, dengan perbedaan berikut:
StrongNameIdentityPermissionberlaku untuk jenis individu, sedangkan perakitan teman berlaku untuk seluruh perakitan.
Jika ada ratusan jenis di Perakitan A yang ingin Anda bagikan dengan Perakitan B, Anda harus menambahkan StrongNameIdentityPermission ke semuanya. Jika Anda menggunakan perakitan teman, Anda hanya perlu mendeklarasikan hubungan pertemanan satu kali.
Jika Anda menggunakan StrongNameIdentityPermission, jenis yang ingin Anda bagikan harus dideklarasikan sebagai publik. Jika Anda menggunakan perakitan teman, jenis yang dibagikan dideklarasikan sebagai
internal
(C#) atauFriend
(Visual Basic).
Untuk informasi tentang cara mengakses jenis dan metode perakitan internal
(C#) atau Friend
(Visual Basic) dari file modul (file dengan ekstensi .netmodule), lihat ModuleAssemblyName (C#) atau -moduleassemblyname (Visual Basic).