InternalsVisibleToAttribute Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Normalde yalnızca geçerli derleme içinde görünen türlerin belirtilen bir derlemeye görünür olduğunu belirtir.
public ref class InternalsVisibleToAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Assembly, AllowMultiple=true, Inherited=false)]
public sealed class InternalsVisibleToAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Assembly, AllowMultiple=true, Inherited=false)>]
type InternalsVisibleToAttribute = class
inherit Attribute
Public NotInheritable Class InternalsVisibleToAttribute
Inherits Attribute
- Devralma
- Öznitelikler
Örnekler
İmzalı derlemeler
Aşağıdaki örnek, imzalı derlemede adlı InternalsVisibleToAttribute bir yöntemi başka bir internal imzalı derlemede görünür hale getirmek için özniteliğini kullanırAppendDirectorySeparator. İç FileUtilities yöntem içeren bir AppendDirectorySeparator sınıf tanımlar.
InternalsVisibleToAttribute özniteliği, sınıfını içeren derlemeye FileUtilities uygulanır. özniteliği adlı Friend1 derlemenin bu iç üyeye erişmesine izin verir.
//
// The source code should be saved in a file named Example1.cs. It
// can be compiled at the command line as follows:
//
// csc /t:library /keyfile:<snkfilename> Assembly1.cs
//
// The public key of the Friend1 file should be changed to the full
// public key stored in your strong-named key file.
//
using System;
using System.IO;
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo("Friend1, PublicKey=002400000480000094" +
"0000000602000000240000525341310004000" +
"001000100bf8c25fcd44838d87e245ab35bf7" +
"3ba2615707feea295709559b3de903fb95a93" +
"3d2729967c3184a97d7b84c7547cd87e435b5" +
"6bdf8621bcb62b59c00c88bd83aa62c4fcdd4" +
"712da72eec2533dc00f8529c3a0bbb4103282" +
"f0d894d5f34e9f0103c473dce9f4b457a5dee" +
"fd8f920d8681ed6dfcb0a81e96bd9b176525a" +
"26e0b3")]
public class FileUtilities
{
internal static string AppendDirectorySeparator(string dir)
{
if (!dir.Trim().EndsWith(Path.DirectorySeparatorChar.ToString()))
return dir.Trim() + Path.DirectorySeparatorChar;
else
return dir;
}
}
'
' The source code should be saved in a file named Example1.cs. It
' can be compiled at the command line as follows:
'
' vbc Assembly1.vb /t:library /keyfile:<snkfilename>
'
' The public key of the Friend1 file should be changed to the full
' public key stored in your strong-named key file.
'
Imports System.IO
Imports System.Runtime.CompilerServices
<Assembly:InternalsVisibleTo("Friend1, PublicKey=002400000480000094" + _
"0000000602000000240000525341310004000" + _
"001000100bf8c25fcd44838d87e245ab35bf7" + _
"3ba2615707feea295709559b3de903fb95a93" + _
"3d2729967c3184a97d7b84c7547cd87e435b5" + _
"6bdf8621bcb62b59c00c88bd83aa62c4fcdd4" + _
"712da72eec2533dc00f8529c3a0bbb4103282" + _
"f0d894d5f34e9f0103c473dce9f4b457a5dee" + _
"fd8f920d8681ed6dfcb0a81e96bd9b176525a" + _
"26e0b3")>
Public Class FileUtilities
Friend Shared Function AppendDirectorySeparator(dir As String) As String
If Not dir.Trim().EndsWith(Path.DirectorySeparatorChar) Then
Return dir.Trim() + Path.DirectorySeparatorChar
Else
Return dir
End If
End Function
End Class
Aşağıdaki örnek adlı Friend1Example.Main tanımlayıcı adlandırılmış bir derlemede derlenmişse, yöntemi Friend1 derlemenin FileUtilities.AppendDirectorySeparator içinde Assembly1 olmasına rağmen içindeki yöntemi başarıyla çağırabilir. Komut satırından C# dilinde derleme gerçekleştiriyorsanız, derleyici dış başvurulara bağlandığında arkadaş derlemesinin adının kullanılabilir olduğundan emin olmak için /out derleyici anahtarını kullanmanız gerekir.
//
// The source code should be saved in a file named Friend1.cs. It
// can be compiled at the command line as follows:
//
// csc /r:Assembly1.dll /keyfile:<snkfilename> /out:Friend1.dll Friend1.cs
//
// The public key of the Friend1 assembly should correspond to the public key
// specified in the class constructor of the InternalsVisibleTo attribute in the
// Assembly1 assembly.
//
using System;
public class Example
{
public static void Main()
{
string dir = @"C:\Program Files";
dir = FileUtilities.AppendDirectorySeparator(dir);
Console.WriteLine(dir);
}
}
// The example displays the following output:
// C:\Program Files\
'
' The source code should be saved in a file named Friend1.vb. It
' can be compiled at the command line as follows:
'
' vbc Friend1.vb /r:Assembly1.dll /keyfile:<snkfilename>
'
' The public key of the Friend1 assembly should correspond to the public key
' specified in the class constructor of the InternalsVisibleTo attribute in the
' Assembly1 assembly.
'
Module Example
Public Sub Main()
Dim dir As String = "C:\Program Files"
dir = FileUtilities1.AppendDirectorySeparator(dir)
Console.WriteLine(dir)
End Sub
End Module
' The example displays the following output:
' C:\Program Files\
İmzasız derlemeler
Aşağıdaki örnek, imzalanmamış bir derlemenin üyesini başka bir InternalsVisibleToAttribute imzasız derlemede görünür hale getirmek için özniteliğini kullanırinternal. özniteliği, adlı derlemedeki yönteminin internalStringLib.IsFirstLetterUpperCase adlı UtilityLibFriend2derlemedeki koda görünür olmasını sağlar. UtilityLib.dlliçin kaynak kodu aşağıdadır:
using System;
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleToAttribute("Friend2")]
namespace Utilities.StringUtilities
{
public class StringLib
{
internal static bool IsFirstLetterUpperCase(String s)
{
string first = s.Substring(0, 1);
return first == first.ToUpper();
}
}
}
Imports System.Runtime.CompilerServices
<assembly: InternalsVisibleTo("Friend2")>
Namespace Utilities.StringUtilities
Public Class StringLib
Friend Shared Function IsFirstLetterUpperCase(s As String) As Boolean
Dim first As String = s.Substring(0, 1)
Return first = first.ToUpper()
End Function
End Class
End Namespace
Aşağıdaki örnek, derlemenin Friend2 kaynak kodunu sağlar. Komut satırından C# dilinde derleniyorsanız, derleyici dış başvurulara bağlandığında arkadaş derlemesinin adının kullanılabilir olduğundan emin olmak için /out derleyici anahtarını kullanmanız gerektiğini unutmayın.
using System;
public class Example1
{
public static void Main()
{
String s = "The Sign of the Four";
//Console.WriteLine(Utilities.StringUtilities.StringLib.IsFirstLetterUpperCase(s));
}
}
Module Example1
Public Sub Main()
Dim s As String = "The Sign of the Four"
' Console.WriteLine(Utilities.StringUtilities.StringLib.IsFirstLetterUpperCase(s))
End Sub
End Module
Açıklamalar
InternalsVisibleToAttribute özniteliği, normalde yalnızca geçerli derleme içinde görünen türlerin belirtilen bir derlemeye görünür olduğunu belirtir.
Normalde, C# veya Visual Basic'te kapsamı olaninternal türler ve üyeler yalnızca tanımlandığı derlemede görünür.Friend
protected internal kapsamı olan türler ve üyeler, yalnızca kendi derlemelerinde veya kapsayan sınıflarından türeyen türlerde görünür (Protected Friend kapsamı Visual Basic'te).
private protected kapsamına (Private Protected kapsamı Visual Basic) sahip türler ve üyeler, kapsayıcı sınıfında veya geçerli derleme içindeki kendi içeren sınıfından türetilen türlerde görünür.
InternalsVisibleToAttribute özniteliği, bu türlerin ve üyelerin, arkadaş derlemesi olarak bilinen belirtilen derlemedeki türler için de görünür olmasını sağlar. Bu yalnızca internal (Friend Visual Basic'te), protected internal (Protected Friend Visual Basic'te), ve private protected (Private Protected Visual Basic'te) üyeler için geçerlidir, ancak private olanlar için geçerli değildir.
Note
( Visual Basic'te) üyeler söz konusu olduğunda private protected , Private Protected özniteliği erişilebilirliği yalnızca üyenin InternalsVisibleToAttribute türetilen türlere genişletir.
Öznitelik derleme seviyesinde uygulanır. Bu, bir kaynak kod dosyasının başına veya bir Visual Studio projesindeki AssemblyInfo dosyasına dahil edilebileceği anlamına gelir. özniteliğini kullanarak, geçerli derlemenin iç türlerine ve üyelerine erişebilen tek bir arkadaş derlemesi belirtebilirsiniz. Birden çok arkadaş derlemesi iki şekilde tanımlayabilirsiniz. Bunlar, aşağıdaki örnekte gösterildiği gibi tek tek derleme düzeyi öznitelikler olarak görünebilir.
[assembly:InternalsVisibleTo("Friend1a")]
[assembly:InternalsVisibleTo("Friend1b")]
<assembly:InternalsVisibleTo("Friend1a")>
<assembly:InternalsVisibleTo("Friend1b")>
Ayrıca, aşağıdaki örnekte gösterildiği gibi ayrı InternalsVisibleToAttribute etiketlerle ancak tek assembly bir anahtar sözcükle de görünebilirler.
[assembly:InternalsVisibleTo("Friend2a"),
InternalsVisibleTo("Friend2b")]
<Assembly:InternalsVisibleTo("Friend2a"), _
Assembly:InternalsVisibleTo("Friend2b")>
Arkadaş derlemesi oluşturucu tarafından InternalsVisibleToAttribute tanımlanır. Hem geçerli derleme hem de arkadaş derlemesinin imzasız olması ya da her iki derlemenin de güçlü bir adla imzalanması gerekir.
Her iki derleme de imzasızsa, assemblyName parametre bir dizin yolu veya dosya adı uzantısı olmadan belirtilen arkadaş derlemesinin adından oluşur.
Her iki derleme de güçlü bir adla imzalanırsa, oluşturucunun InternalsVisibleToAttribute bağımsız değişkeni, dizin yolu veya dosya adı uzantısı olmadan derlemenin adı ve tam ortak anahtardan (ortak anahtar belirteci değil) oluşmalıdır. Güçlü adı olan bir derlemenin tam ortak anahtarını almak için, bu makalenin ilerleyen kısımlarında yer alan Tam ortak anahtarı alma bölümüne bakın. Tanımlayıcı adlandırılmış derlemelerle InternalsVisibleToAttribute kullanımına ilişkin daha fazla bilgi almak için InternalsVisibleToAttribute oluşturucuya bakın.
Bağımsız değişkene CultureInfo, Versionveya ProcessorArchitecture alanının değerlerini eklemeyin; Visual Basic, C# ve C++ derleyicileri bunu bir derleyici hatası olarak değerlendirir. Bu durumu hata olarak kabul etmeyen bir derleyici kullanırsanız (örneğin IL Assembler (ILAsm.exe)) ve derlemeler güçlü adlandırılmışsa, belirtilen arkadaş derleme, özniteliği içeren derlemeye ilk kez eriştiğinde bir MethodAccessException özel durum fırlatılır.
Bu özniteliği kullanma hakkında daha fazla bilgi için bkz . Arkadaş derlemeleri ve C++ arkadaş derlemeleri.
Tam açık anahtarı al
Güçlü adı olan bir anahtar (.snk) dosyasından tam ortak anahtarı almak için Güçlü Ad Aracı'nı (Sn.exe) kullanabilirsiniz. Bunu yapmak için aşağıdaki adımları gerçekleştirin:
Açık anahtarı güçlü adlandırılmış anahtar dosyasından ayrı bir dosyaya ayıklayın.
Sn -p <snk_file> <outfile>Konsolda tam kamu anahtarını görüntüleyin:
Sn -tp <outfile>Tam ortak anahtar değerini kopyalayıp kaynak kodunuz içine yapıştırın.
Arkadaş derlemeyi C# ile derleyin.
Arkadaş derlemesini derlemek için C# derleyicisini kullanırsanız, /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. Visual Basic derleyicisi için /out derleyicisi seçeneği isteğe bağlıdır ve F# derleyicisi ile arkadaş derlemeleri derlenirken karşılık gelen -out veya -o derleyici seçeneği kullanılmamalıdır.
Arkadaş derlemesini C++ ile derleme
C++'ta, InternalsVisibleToAttribute özniteliği ile etkinleştirilen iç üyeleri bir arkadaş birleştirmesi için erişilebilir hale getirmek amacıyla, C++ yönergesinde as_friend özniteliğini kullanmanız gerekir. Daha fazla bilgi için Arkadaş Derlemeleri (C++) bölümüne bakın.
Oluşturucular
| Name | Description |
|---|---|
| InternalsVisibleToAttribute(String) |
Belirtilen arkadaş derlemesinin InternalsVisibleToAttribute adıyla sınıfının yeni bir örneğini başlatır. |
Özellikler
| Name | Description |
|---|---|
| AllInternalsVisible |
Bu özellik uygulanmadı. |
| AssemblyName |
Anahtar sözcükle işaretlenmiş tüm türlerin ve tür üyelerinin görünür hale getirileceği arkadaş derlemesinin |
| TypeId |
Türetilmiş bir sınıfta uygulandığında, bu Attributeiçin benzersiz bir tanımlayıcı alır. (Devralındığı yer: Attribute) |
Yöntemler
| Name | Description |
|---|---|
| Equals(Object) |
Bu örneğin belirtilen bir nesneye eşit olup olmadığını gösteren bir değer döndürür. (Devralındığı yer: Attribute) |
| GetHashCode() |
Bu örneğin karma kodunu döndürür. (Devralındığı yer: Attribute) |
| GetType() |
Geçerli örneğin Type alır. (Devralındığı yer: Object) |
| IsDefaultAttribute() |
Türetilmiş bir sınıfta geçersiz kılındığında, bu örneğin değerinin türetilmiş sınıf için varsayılan değer olup olmadığını gösterir. (Devralındığı yer: Attribute) |
| Match(Object) |
Türetilmiş bir sınıfta geçersiz kılındığında, bu örneğin belirtilen bir nesneye eşit olup olmadığını gösteren bir değer döndürür. (Devralındığı yer: Attribute) |
| MemberwiseClone() |
Geçerli Objectbasit bir kopyasını oluşturur. (Devralındığı yer: Object) |
| ToString() |
Geçerli nesneyi temsil eden bir dize döndürür. (Devralındığı yer: Object) |
Belirtik Arabirim Kullanımları
| Name | Description |
|---|---|
| _Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Bir ad kümesini karşılık gelen bir dağıtma tanımlayıcısı kümesine eşler. (Devralındığı yer: Attribute) |
| _Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Bir arabirimin tür bilgilerini almak için kullanılabilecek bir nesnenin tür bilgilerini alır. (Devralındığı yer: Attribute) |
| _Attribute.GetTypeInfoCount(UInt32) |
Bir nesnenin sağladığı tür bilgisi arabirimlerinin sayısını alır (0 ya da 1). (Devralındığı yer: Attribute) |
| _Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Bir nesne tarafından kullanıma sunulan özelliklere ve yöntemlere erişim sağlar. (Devralındığı yer: Attribute) |