Aracılığıyla paylaş


Arkadaş derlemeleri

Arkadaş derlemesi, başka bir derlemenin (C#) veya Arkadaş (Visual Basic) türlerine ve üyelerine erişebilen bir derlemedir. AssemblyB'yi bir arkadaş derlemesi olarak tanımlamak için AssemblyA'ya bir derleme özniteliği eklerseniz, assemblyB tarafından erişilebilmesi için artık AssemblyA'daki türleri ve üyeleri genel olarak işaretlemeniz gerekmez. Bu özellikle aşağıdaki senaryolarda kullanışlıdır:

  • Birim testi sırasında, test kodu ayrı bir derlemede çalıştırıldığında ancak test edilen derlemedeki üyelerin C#'ta internal veya Visual Basic'te Friend olarak işaretlendiği durumlarda üyelere erişim gerektirir.

  • Bir sınıf kitaplığı geliştirirken ve kitaplığa eklemeler ayrı derlemelerde yer alıyorsa, ancak C#'ta internal veya Visual Basic'te Friend olarak işaretlenmiş mevcut derlemelerdeki üyelere erişim gerekiyorsa.

Açıklamalar

Özniteliğini InternalsVisibleToAttribute , belirli bir derleme için bir veya daha fazla arkadaş derlemesini tanımlamak için kullanabilirsiniz. Aşağıdaki örnek InternalsVisibleToAttribute içindeki özniteliğini kullanır ve derleme AssemblyB'yi bir arkadaş derlemesi olarak belirtir. Bu, C#'ta veya Visual Basic'te olarak işaretlenmiş internal içindeki tüm türlere ve üyelere Friend derlemesine erişim sağlar.

Uyarı

AssemblyB gibi iç türlere veya AssemblyA gibi başka bir derlemenin iç üyelerine erişecek bir derleme derlerken, -out derleyici seçeneğini kullanarak çıkış dosyasının adını (.exe veya .dll) açıkça belirtmeniz gerekir. Derleyici, dış başvurulara bağlandığı sırada oluşturduğu derlemenin adını henüz oluşturmadığından bu gereklidir. Daha fazla bilgi için bkz . OutputAssembly (C#) veya -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

Explicit olarak dost olarak belirttiğiniz derlemeler yalnızca internal (C#) veya Friend (Visual Basic) türlerine ve üyelerine erişebilir. Örneğin, BütünleştirmeB, Bütünleştirme A'nın bir arkadaşıysa ve Bütünleştirme CBütünleştirmeB'ye başvuruyorsa, Bütünleştirme C, internal (C#) veya (Visual Basic) türlerine Friend erişemez.

Derleyici, InternalsVisibleToAttribute özniteliğine geçirilen arkadaş derleme adının bazı temel doğrulamalarını gerçekleştirir. Derleme A, AssemblyB'yi bir arkadaş derlemesi olarak bildirirse, doğrulama kuralları aşağıdaki gibidir:

  • Derleme A güçlü adlandırılmışsa, Derleme B de güçlü adlandırılmalıdır. Özniteliğe geçirilen arkadaş birleştirme adı, birleştirme adından ve AssemblyB'yi imzalamak için kullanılan güçlü ad anahtarının ortak anahtarından oluşmalıdır.

    Özniteliğe InternalsVisibleToAttribute ile aktarılan arkadaş meclis adı, AssemblyB'nin güçlü adı olamaz. Derleme sürümünü, kültürü, mimariyi veya ortak anahtar belirtecini eklemeyin.

  • Eğer Derleme A güçlü adlandırılmış değilse, arkadaş derleme adı yalnızca derleme adından oluşmalıdır. Daha fazla bilgi için bkz . Nasıl yapılır: İmzasız arkadaş derlemeleri oluşturma.

  • AssemblyB tanımlayıcı olarak adlandırılmışsa, proje ayarını veya komut satırı derleyici seçeneğini kullanarak /keyfile için tanımlayıcı ad anahtarını belirtmeniz gerekir. Daha fazla bilgi için bkz . Nasıl yapılır: İmzalı arkadaş derlemeleri oluşturma.

sınıfı StrongNameIdentityPermission , aşağıdaki farklarla türleri paylaşma olanağı da sağlar:

  • StrongNameIdentityPermission tek bir türe uygulanırken, friend assembly ise bütün derlemeye uygulanır.

  • Assembly A'daki yüzlerce türü AssemblyB ile paylaşmak istiyorsanız, bunların tümüne StrongNameIdentityPermission eklemeniz gerekir. Arkadaş derlemesi kullanıyorsanız, arkadaş ilişkisini yalnızca bir kez bildirmeniz gerekir.

  • Eğer StrongNameIdentityPermission kullanıyorsanız, paylaşmak istediğiniz türlerin kamuya açık olarak bildirilmesi gerekir. Bir arkadaş derlemesi kullanıyorsanız, paylaşılan türler internal (C#) veya Friend (Visual Basic) olarak bildirilir.

Bir derlemenin internal (C#) veya Friend (Visual Basic) türlerine ve yöntemlerine bir modül dosyasından ( .netmodule uzantısına sahip bir dosya) erişme hakkında bilgi için bkz. ModuleAssemblyName (C#) veya -moduleassemblyname (Visual Basic).

Ayrıca bakınız