InternalsVisibleToAttribute(String) Konstruktor

Definice

Inicializuje novou instanci InternalsVisibleToAttribute třídy s názvem zadaného přítele sestavení.

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)

Parametry

assemblyName
String

Název známého sestavení.

Příklady

Podepsaná sestavení

Následující příklad používá InternalsVisibleToAttribute atribut k vytvoření internal metody pojmenované AppendDirectorySeparator v podepsané sestavení viditelné pro jiné podepsané sestavení. FileUtilities Definuje třídu, která obsahuje interní AppendDirectorySeparator metodu. Atribut InternalsVisibleToAttribute se použije na sestavení, které obsahuje FileUtilities třídu. Atribut umožňuje sestavení pojmenované Friend1 pro přístup k tomuto internímu členu.

//
// 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

Pokud je následující příklad zkompilován do sestavení se silným názvem s názvem Friend1, může úspěšně volat metodu FileUtilities.AppendDirectorySeparator , i když je metoda interní pro Assembly1 sestavení. Všimněte si, že pokud kompilujete v jazyce C# z příkazového řádku, musíte použít přepínač kompilátoru /out , abyste zajistili, že je název přátelského sestavení dostupný, když kompilátor vytvoří vazbu na externí odkazy.

//
// 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\

Následující příklad používá InternalsVisibleToAttribute atribut k tomu, aby internal člen unsigned sestavení viditelné pro jiné nepodepsané sestavení. Atribut zajišťuje, že internalStringLib.IsFirstLetterUpperCase metoda v sestavení s názvem UtilityLib je viditelná pro kód v sestavení s názvem Friend2. Následuje zdrojový kód pro UtilityLib.dll:

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

Nepodepsané sestavení

Následující příklad poskytuje zdrojový kód pro Friend2 sestavení. Všimněte si, že pokud kompilujete v jazyce C# z příkazového řádku, musíte použít přepínač kompilátoru /out , abyste zajistili, že je název přátelského sestavení dostupný, když kompilátor vytvoří vazbu na externí odkazy.

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

Poznámky

Konstruktor InternalsVisibleToAttribute definuje známé sestavení, což je sestavení, které má přístup k interním a privátním chráněným typům a členům aktuálního sestavení.

Aktuální sestavení i přátelská sestavení musí být nepodepsané, nebo musí být podepsány silným názvem. (Další informace osestaveních Pokud jsou oba nepodepsané, assemblyName argument se skládá z názvu známého sestavení zadaného bez cesty k adresáři nebo přípony souboru. Pokud jsou obě podepsány, assemblyName skládá se z názvu známého sestavení bez cesty k adresáři nebo přípony názvu souboru spolu s jeho úplným veřejným klíčem (ale ne jeho token veřejného klíče). Ostatní komponenty silného názvu, například ty, které poskytují informace o architektuře jazykové verze, verze nebo procesoru, nelze v argumentu assemblyName zadat.

Important

Pokud použijete kompilátor jazyka C# ke kompilaci přátelského sestavení, je nutné explicitně zadat název výstupního souboru (.exe nebo .dll) pomocí volby /out kompilátoru. To je povinné, protože kompilátor ještě negeneroval název sestavení, které sestavuje v době, kdy je vázán na externí odkazy. Možnost /out kompilátoru je volitelná pro kompilátor jazyka Visual Basic a odpovídající možnost -out nebo -o kompilátoru by se neměla použít při kompilaci přátelských sestavení pomocí kompilátoru jazyka F#.

Pomocí nástrojeSn.exe (Strong Name Tool) můžete načíst úplný veřejný klíč ze souboru se silným názvem (.snk). Provedete to takto:

  1. Extrahujte veřejný klíč ze souboru s názvem silného klíče do samostatného souboru.

    Sn -psnk_fileoutfile

  2. Zobrazení úplného veřejného klíče do konzoly:

    Sn -tpoutfile

  3. Zkopírujte a vložte úplnou hodnotu veřejného klíče do zdrojového kódu.

Další informace o použití atributu InternalsVisibleToAttribute najdete v následujících článcích:

Platí pro