Aracılığıyla paylaş


InternalsVisibleToAttribute(String) Oluşturucu

Tanım

belirtilen arkadaş derlemesinin adıyla InternalsVisibleToAttribute sınıfının yeni bir örneğini başlatır.

public:
 InternalsVisibleToAttribute(System::String ^ assemblyName);
public InternalsVisibleToAttribute (string assemblyName);
new System.Runtime.CompilerServices.InternalsVisibleToAttribute : string -> System.Runtime.CompilerServices.InternalsVisibleToAttribute
Public Sub New (assemblyName As String)

Parametreler

assemblyName
String

Arkadaş derlemesinin adı.

Örnekler

İmzalı derlemeleri

Aşağıdaki örnek, imzalı bir derlemedeki AppendDirectorySeparator adlı bir internal yöntemini başka bir imzalı derlemede görünür hale getirmek için InternalsVisibleToAttribute özniteliğini kullanır. İç AppendDirectorySeparator yöntemi içeren bir FileUtilities sınıfı tanımlar. InternalsVisibleToAttribute özniteliği, FileUtilities sınıfını içeren derlemeye uygulanır. özniteliği, Friend1 adlı bir 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, Friend1adlı tanımlayıcı adlandırılmış bir derlemede derlenmişse, yöntem Assembly1 derlemesinin içinde olsa bile FileUtilities.AppendDirectorySeparator yöntemini başarıyla çağırabilir. 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.

//
// The assembly that exposes its internal types to this assembly should be
// named Assembly1.dll.
//
// The public key of this assembly should correspond to the public key
// specified in the class constructor of the InternalsVisibleTo attribute in the
// Assembly1 assembly.
//
#using <Assembly1.dll> as_friend

using namespace System;

void main()
{
   String^ dir = L"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.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 = FileUtilities.AppendDirectorySeparator(dir)
      Console.WriteLine(dir)
   End Sub
End Module
' The example displays the following output:
'       C:\Program Files\

Aşağıdaki örnek, imzasız bir derlemenin internal üyesini başka bir imzasız derlemede görünür hale getirmek için InternalsVisibleToAttribute özniteliğini kullanır. özniteliği, UtilityLib adlı bir derlemedeki internalStringLib.IsFirstLetterUpperCase yönteminin Friend2adlı derlemedeki 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

İmzasız derlemeleri

Aşağıdaki örnek, Friend2 derlemesinin 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 <UtilityLib.dll> as_friend

using namespace System;
using namespace Utilities::StringUtilities;

void main()
{
   String^ s = "The Sign of the Four";
   Console::WriteLine(StringLib::IsFirstLetterUpperCase(s));
}
using System;
using Utilities.StringUtilities;

public class Example
{
   public static void Main()
   {
      String s = "The Sign of the Four";
      Console.WriteLine(StringLib.IsFirstLetterUpperCase(s));
   }
}
Imports Utilities.StringUtilities

Module Example
   Public Sub Main()
      Dim s As String = "The Sign of the Four"
      Console.WriteLine(StringLib.IsFirstLetterUpperCase(s))
   End Sub
End Module

Açıklamalar

InternalsVisibleToAttribute oluşturucu, iç ve özel korumalı türlere ve geçerli derlemenin üyelerine erişimi olan bir derleme olan bir arkadaş derlemesini tanımlar.

Hem geçerli derleme hem de arkadaş derlemesinin imzasız olması veya her ikisinin de tanımlayıcı bir adla imzalanması gerekir. (Tanımlayıcı adlandırılmış derlemeler hakkında daha fazla bilgi için bkz. Tanımlayıcı adlandırılmış derlemeler oluşturma ve kullanma.) her ikisi de imzalanmamışsa, assemblyName bağımsız değişkeni dizin yolu veya dosya uzantısı olmadan belirtilen arkadaş derlemesinin adından oluşur. her ikisi de imzalıysa, assemblyName dizin yolu veya dosya adı uzantısı olmadan arkadaş derlemesinin adından ve tam ortak anahtarından (ortak anahtar belirteciyle birlikte) oluşur. Kültür, sürüm veya işlemci mimarisi bilgileri sağlayanlar gibi bir tanımlayıcı adın diğer bileşenleri assemblyName bağımsız değişkeninde belirtilemez.

Önemli

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 derleyici seçeneği isteğe bağlıdır ve arkadaş derlemeleri F# derleyicisiyle derlenirken ilgili -out veya -o derleyici seçeneği kullanılmamalıdır.

Sn.exe (Tanımlayıcı Ad Aracı) kullanarak tanımlayıcı adlı bir anahtar (.snk) dosyasından tam ortak anahtarı alabilirsiniz. Bunu yapmak için aşağıdaki adımları gerçekleştirin:

  1. Ortak anahtarı tanımlayıcı adlı anahtar dosyasından ayrı bir dosyaya ayıklayın:

    Sn -psnk_fileoutfile

  2. Konsolda tam ortak anahtarı görüntüleyin:

    Sn -tpoutfile

  3. Tam ortak anahtar değerini kopyalayıp kaynak kodunuz içine yapıştırın.

InternalsVisibleToAttribute özniteliğini kullanma hakkında daha fazla bilgi için aşağıdaki makalelere bakın:

Şunlara uygulanır