Arkadaş derlemeleri

Arkadaş derlemesi, başka bir derlemenin iç (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'dakitü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 C# veya Friend Visual Basic'te olarak internal işaretlenen test edilen derlemedeki üyelere erişim gerektirir.

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

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 AssemblyA içindeki özniteliğini InternalsVisibleToAttribute kullanır ve derleme AssemblyB'yi bir arkadaş derlemesi olarak belirtir. Bu, AssemblyB derlemesine C# veya Visual Basic'te olarak internal işaretlenen A Derlemesindeki tüm türlere ve Friend üyelere erişim verir.

Not

AssemblyA gibi başka bir derlemenin iç türlerine veya iç üyelerine erişecek AssemblyB gibi 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

Yalnızca arkadaş olarak açıkça belirttiğiniz derlemeler (C#) veya Friend (Visual Basic) türlerine ve üyelerine erişebilir internal . Örneğin, AssemblyB, Derleme A ve Derleme C'nin arkadaşıysa AssemblyB'ye başvurur, C Derlemesi'nin A Derlemesindeki (C#) veya Friend (Visual Basic) türlerine internalerişimi yoktur.

Derleyici, özniteliğine geçirilen arkadaş derleme adının bazı temel doğrulamasını InternalsVisibleToAttribute 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, AssemblyB de tanımlayıcı olarak adlandırılmalıdır. Özniteliğine geçirilen arkadaş derleme adı derleme adından ve AssemblyB'yi imzalamak için kullanılan tanımlayıcı ad anahtarının ortak anahtarından oluşmalıdır.

    Özniteliğine InternalsVisibleToAttribute geçirilen arkadaş derleme adı AssemblyB'nin tanımlayıcı adı olamaz. Derleme sürümünü, kültürü, mimariyi veya ortak anahtar belirtecini eklemeyin.

  • Derleme A tanımlayıcı olarak adlandırılmazsa, 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ı /keyfile derleyici seçeneğini kullanarak AssemblyB 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, arkadaş derlemesi bütün derlemeye uygulanır.

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

  • kullanıyorsanız StrongNameIdentityPermission, paylaşmak istediğiniz türlerin genel olarak bildirilmesi gerekir. Bir arkadaş derlemesi kullanıyorsanız, paylaşılan türler (C#) veya Friend (Visual Basic) olarak internal 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 bkz.