Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Známé sestavení je sestavení, které má přístup k typům a členům z jiného sestavení, označeným jako internal v C# nebo Friend ve Visual Basicu. Pokud do AssemblyA přidáte atribut sestavení, který identifikuje SestaveníB jako přátelské sestavení, už nemusíte označit typy a členy v AssemblyA jako veřejné, aby k nim měl přístup SestaveníB. To je zvlášť vhodné v následujících scénářích:
Při testování jednotek, kdy je testovací kód spuštěn v samostatném sestavení, ale vyžaduje přístup k členům v sestavení, které se testuje, jež jsou označené jako
internalv jazyce C# neboFriendv jazyce Visual Basic.Při vývoji knihovny tříd, kdy jsou doplňky do knihovny umístěny v samostatných sestaveních, ale vyžadují přístup k členům v existujících sestaveních, která jsou označena jako
internalv jazyce C# neboFriendv jazyce Visual Basic.
Poznámky
Můžete použít atribut InternalsVisibleToAttribute k identifikaci jednoho nebo více přátelských sestavení pro dané sestavení. Následující příklad používá InternalsVisibleToAttribute atribut v AssemblyA a určuje AssemblyB jako přátelské sestavení. To dává sestavení SestaveníB přístup ke všem typům a členům sestavení A , které jsou označené jako internal v jazyce C# nebo Friend v jazyce Visual Basic.
Poznámka:
Při kompilaci sestavení, jako je AssemblyB , který bude přistupovat k interním typům nebo interním členům jiného sestavení, jako je AssemblyA, musíte 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é sestavuje v době, kdy je vázán na externí odkazy. Další informace najdete v tématu OutputAssembly (C#) nebo -out (Visual Basic).
using System.Runtime.CompilerServices;
using System;
[assembly: InternalsVisibleTo("AssemblyB")]
// The class is internal by default.
class FriendClass
{
public void Test()
{
Console.WriteLine("Sample Class");
}
}
// Public class that has an internal method.
public class ClassWithFriendMethod
{
internal void Test()
{
Console.WriteLine("Sample Method");
}
}
Imports System.Runtime.CompilerServices
<Assembly: InternalsVisibleTo("AssemblyB")>
' Friend class.
Friend Class FriendClass
Public Sub Test()
Console.WriteLine("Sample Class")
End Sub
End Class
' Public class with a Friend method.
Public Class ClassWithFriendMethod
Friend Sub Test()
Console.WriteLine("Sample Method")
End Sub
End Class
Pouze sestavení, která explicitně určíte jako přátele, mají přístup k typům a členům (C#) nebo (Visual Basic) internal a Friend. Pokud je například SestaveníB přítelem sestavení A a sestavení C odkazuje na AssemblyB, sestavení C nemá přístup k internal typům (C#) nebo Friend (Visual Basic) v sestavení A.
Kompilátor provede základní ověření názvu přátelského sestavení, který je předán atributu InternalsVisibleToAttribute. Pokud sestavení A deklaruje SestaveníB jako přátelské sestavení, ověřovací pravidla jsou následující:
Pokud je sestavení A silně pojmenované, musí být sestavení B také silně pojmenované. Název známého sestavení, který je předán atributu, se musí skládat z názvu sestavení a veřejného klíče silného názvu, který se používá k podepsání AssemblyB.
Název přátelského sestavení, který je předán atributu InternalsVisibleToAttribute, nemůže být silným názvem AssemblyB. Nezahrnujte verzi sestavení, kulturní nastavení, architekturu nebo token veřejného klíče.
Pokud sestavení A není opatřeno silným názvem, název přátelského sestavení by se měl skládat pouze z názvu sestavení. Podrobnosti naleznete v Jak na to: Vytvoření nepodepsaných přátelských sestavení.
Pokud je sestaveníB silně pojmenované, je nutné zadat klíč silného názvu pro AssemblyB pomocí nastavení projektu nebo volby kompilátoru pro příkazový řádek
/keyfile. Další informace naleznete v tématu Jak: Vytvořit podepsaná přátelská sestavení.
Třída StrongNameIdentityPermission také poskytuje možnost sdílet typy s následujícími rozdíly:
StrongNameIdentityPermission platí pro jednotlivý typ, zatímco přátelské sestavení platí pro celou sestavu.
Pokud jsou v sestavení A stovky typů, které chcete sdílet s AssemblyB, musíte je přidat StrongNameIdentityPermission do všech. Pokud používáte přátelské sestavení, stačí deklarovat vztah přítele jen jednou.
Pokud použijete StrongNameIdentityPermission, typy, které chcete sdílet, musí být deklarovány jako veřejné. Pokud používáte přátelské sestavení, sdílené typy jsou deklarovány jako
internal(C#) neboFriend(Visual Basic).
Informace o tom, jak získat přístup k typům a metodám sestavení internal (C#) nebo Friend (Visual Basic) ze souboru modulu (soubor s příponou .netmodule), najdete v tématu ModuleAssemblyName (C#) nebo -moduleassemblyname (Visual Basic).