InternalsVisibleToAttribute(String) Konstruktor
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Initierar en ny instans av InternalsVisibleToAttribute klassen med namnet på den angivna vänsammansättningen.
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)
Parametrar
- assemblyName
- String
Namnet på en vänsammansättning.
Exempel
Signerade sammansättningar
I följande exempel används InternalsVisibleToAttribute attributet för att göra en internal metod med namnet i en signerad AppendDirectorySeparator sammansättning synlig för en annan signerad sammansättning. Den definierar en FileUtilities klass som innehåller en intern AppendDirectorySeparator metod. Attributet InternalsVisibleToAttribute tillämpas på sammansättningen som innehåller FileUtilities klassen. Attributet tillåter att en sammansättning med namnet Friend1 får åtkomst till den här interna medlemmen.
//
// 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
Om följande exempel kompileras till en stark namngiven Friend1 sammansättning med namnet FileUtilities.AppendDirectorySeparatorkan den anropa metoden, även om metoden är intern för Assembly1 sammansättningen. Observera att om du kompilerar i C# från kommandoraden måste du använda kompilatorväxeln /out för att se till att namnet på vänsammansättningen är tillgängligt när kompilatorn binder till externa referenser.
//
// 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\
I följande exempel används InternalsVisibleToAttribute attributet för att göra en internal medlem i en osignerad sammansättning synlig för en annan osignerad sammansättning. Attributet säkerställer att internalStringLib.IsFirstLetterUpperCase metoden i en sammansättning med namnet UtilityLib är synlig för koden i en sammansättning med namnet Friend2. Följande är källkoden för 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
Osignerade sammansättningar
I följande exempel finns källkoden Friend2 för sammansättningen. Observera att om du kompilerar i C# från kommandoraden måste du använda kompilatorväxeln /out för att se till att namnet på vänsammansättningen är tillgängligt när kompilatorn binder till externa referenser.
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
Kommentarer
Konstruktorn InternalsVisibleToAttribute definierar en vänsammansättning, som är en sammansättning som har åtkomst till de interna och privata skyddade typerna och medlemmarna i den aktuella sammansättningen.
Både den aktuella sammansättningen och vänsammansättningen måste vara osignerade, eller båda måste signeras med ett starkt namn. (Mer information om starka namngivna sammansättningar finns i Skapa och använda starka namngivna sammansättningar.) Om båda är osignerade assemblyName består argumentet av namnet på vänsammansättningen, som anges utan en katalogsökväg eller filnamnstillägg. Om båda är signerade assemblyName består det av namnet på vänsammansättningen utan dess katalogsökväg eller filnamnstillägg, tillsammans med dess fullständiga offentliga nyckel (men inte dess offentliga nyckeltoken). De andra komponenterna i ett starkt namn, till exempel de som tillhandahåller information om kultur, version eller processorarkitektur, kan inte anges i assemblyName argumentet.
Important
Om du använder C#-kompilatorn för att kompilera vänsammansättningen måste du uttryckligen ange namnet på utdatafilen (.exe eller .dll) med hjälp av kompilatoralternativet /out . Detta krävs eftersom kompilatorn ännu inte har genererat namnet på den sammansättning som skapas när den binder till externa referenser. Kompilatoralternativet /out är valfritt för Visual Basic-kompilatorn och motsvarande kompilatoralternativ -out eller -o bör inte användas när vänsammansättningar kompileras med F#-kompilatorn.
Du kan använda Sn.exe (strong name tool) för att hämta den fullständiga offentliga nyckeln från en stark namngiven nyckelfil (.snk). För att göra detta utför du följande steg:
Extrahera den offentliga nyckeln från den starkt namngivna nyckelfilen till en separat fil:
Sn -psnk_fileutfil
Visa den fullständiga offentliga nyckeln till konsolen:
Sn -tpoutfile
Kopiera och klistra in det fullständiga offentliga nyckelvärdet i källkoden.
Mer information om hur du använder attributet InternalsVisibleToAttribute finns i följande artiklar: