InternalsVisibleToAttribute(String) Konstruktor
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Inicializuje novou instanci InternalsVisibleToAttribute třídy s názvem zadaného přátelského 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 přátelského sestavení.
Příklady
Podepsaná sestavení
Následující příklad používá InternalsVisibleToAttribute atribut k tomu, aby internal
metoda s názvem AppendDirectorySeparator
v podepsaném sestavení byla viditelná pro jiné podepsané sestavení. Definuje FileUtilities
třídu, která obsahuje interní AppendDirectorySeparator
metodu. Atribut InternalsVisibleToAttribute je použit na sestavení, které obsahuje FileUtilities
třídu . Atribut umožňuje sestavení s názvem Friend1
přistupovat 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í sestavení Assembly1
. 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í k dispozici, když kompilátor vytvoří vazbu na externí odkazy.
//
// 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\
Následující příklad používá InternalsVisibleToAttribute atribut k tomu, aby internal
člen sestavení bez znaménka viditelné pro jiné nepodepsané sestavení. Atribut zajišťuje, aby internal
StringLib.IsFirstLetterUpperCase
metoda v sestavení s názvem UtilityLib
byla 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í k dispozici, když kompilátor vytvoří vazbu na externí odkazy.
#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
Poznámky
Konstruktor InternalsVisibleToAttribute definuje přátelské sestavení, což je sestavení, které má přístup k interním a soukromým chráněným typům a členům aktuálního sestavení.
Aktuální i přátelské sestavení musí být bez znaménka, nebo musí být obě podepsána silným názvem. (Další informace o sestaveních se silným názvem naleznete v tématu Create a použití sestavení se silným názvem.) Pokud jsou oba nepodepsané, assemblyName
argument se skládá z názvu přátelského sestavení zadaného bez cesty k adresáři nebo přípony souboru. Pokud jsou podepsány oba, assemblyName
skládá se z názvu spřáteliné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 jazykové verzi, verzi nebo architektuře procesoru, nelze v argumentu assemblyName
zadat.
Důležité
Pokud použijete kompilátor jazyka C# ke kompilaci spřátelit sestavení, je nutné explicitně zadat název výstupního souboru (.exe nebo .dll) pomocí možnosti kompilátoru /out . To je povinné, protože kompilátor ještě negeneroval název sestavení, které vytváří v době, kdy je vázáno na externí odkazy. Možnost kompilátoru /out je pro kompilátor jazyka Visual Basic volitelná a odpovídající možnost - out nebo -o kompilátoru by neměla být použita při kompilaci přátelských sestavení pomocí kompilátoru jazyka F#.
K načtení úplného veřejného klíče ze souboru klíče se silným názvem (.snk) můžete použít Sn.exe (nástroj se silným názvem). Chcete-li to provést, proveďte následující kroky:
Extrahujte veřejný klíč ze souboru klíče se silným názvem do samostatného souboru:
Sn -psnk_fileoutfile
Zobrazení úplného veřejného klíče ke konzole:
Sn -tpoutfile
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
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro