System.Runtime.CompilerServices.InternalsVisibleToAttribute, klasa
Ten artykuł zawiera dodatkowe uwagi dotyczące dokumentacji referencyjnej dla tego interfejsu API.
Atrybut InternalsVisibleToAttribute określa, że typy, które są zwykle widoczne tylko w bieżącym zestawie, są widoczne dla określonego zestawu.
Zazwyczaj typy i elementy członkowskie z zakresem internal
w języku C# lubFriend
zakres w Visual Basic są widoczne tylko w zestawie, w którym są zdefiniowane. Typy i składowe z zakresem protected internal
(Protected Friend
zakres w Visual Basic) są widoczne tylko w ich własnym zestawie lub typach, które pochodzą z ich zawierającej klasę. Typy i składowe z zakresem private protected
(Private Protected
zakres w Visual Basic) są widoczne w klasie zawierającej lub w typach, które pochodzą z ich zawierającej klasę w bieżącym zestawie
Atrybut InternalsVisibleToAttribute sprawia, że te typy i elementy członkowskie są również widoczne dla typów w określonym zestawie, który jest znany jako zestaw przyjazny. Dotyczy to tylko internal
elementów członkowskich (Friend
w Visual Basic), protected internal
(Protected Friend
w Visual Basic) i private protected
(Private Protected
w Visual Basic), ale nie private
tych.
Uwaga
W przypadku private protected
elementów członkowskich InternalsVisibleToAttribute (Private Protected
w Visual Basic) atrybut rozszerza dostępność tylko do typów, które pochodzą z zawierającej klasy składowej.
Atrybut jest stosowany na poziomie zestawu. Oznacza to, że może zostać uwzględniony na początku pliku kodu źródłowego lub może zostać uwzględniony w pliku AssemblyInfo w projekcie programu Visual Studio. Można użyć atrybutu , aby określić pojedynczy zestaw zaprzyjaźniony, który może uzyskać dostęp do typów wewnętrznych i elementów członkowskich bieżącego zestawu. Można zdefiniować wiele przyjaznych zestawów na dwa sposoby. Mogą one być wyświetlane jako poszczególne atrybuty na poziomie zestawu, jak pokazano w poniższym przykładzie.
[assembly:InternalsVisibleTo("Friend1a")]
[assembly:InternalsVisibleTo("Friend1b")]
<assembly:InternalsVisibleTo("Friend1a")>
<assembly:InternalsVisibleTo("Friend1b")>
Mogą również pojawiać się z oddzielnymi InternalsVisibleToAttribute tagami, ale pojedynczym assembly
słowem kluczowym, jak pokazano w poniższym przykładzie.
[assembly:InternalsVisibleTo("Friend2a"),
InternalsVisibleTo("Friend2b")]
<Assembly:InternalsVisibleTo("Friend2a"), _
Assembly:InternalsVisibleTo("Friend2b")>
Zestaw znajomy InternalsVisibleToAttribute jest identyfikowany przez konstruktora. Zarówno obecny zestaw, jak i zestaw znajomy muszą być niepodpisane lub oba zestawy muszą być podpisane silną nazwą.
Jeśli oba zestawy są niepodpisane, assemblyName
argument składa się z nazwy zestawu znajomego, określonego bez ścieżki katalogu lub rozszerzenia nazwy pliku.
Jeśli oba zestawy są podpisane silną nazwą, argument InternalsVisibleToAttribute konstruktora musi składać się z nazwy zestawu bez ścieżki katalogu lub rozszerzenia nazwy pliku wraz z pełnym kluczem publicznym (a nie tokenem klucza publicznego). Aby uzyskać pełny klucz publiczny zestawu o silnej nazwie, zobacz sekcję Pobieranie pełnego klucza publicznego w dalszej części tego artykułu. Aby uzyskać więcej informacji na temat używania z InternalsVisibleToAttribute zestawami o silnych nazwach, zobacz InternalsVisibleToAttribute konstruktor.
Nie dołączaj wartości dla CultureInfopola , Versionlub ProcessorArchitecture w argumencie; kompilatory Visual Basic, C# i C++ traktują to jako błąd kompilatora. Jeśli używasz kompilatora, który nie traktuje go jako błędu (takiego jak asembler IL (ILAsm.exe)), a zestawy są silnie nazwane, MethodAccessException zostanie zgłoszony wyjątek podczas pierwszego uzyskiwania dostępu do zestawu znajomego, który zawiera InternalsVisibleToAttribute atrybut.
Aby uzyskać więcej informacji na temat używania tego atrybutu, zobacz Friend assemblies and C++ friend assemblies (Zestawy znajome języka C++).
Uzyskiwanie pełnego klucza publicznego
Możesz użyć narzędzia Strong Name Tool (Sn.exe), aby pobrać pełny klucz publiczny z pliku klucza o silnej nazwie (snk). W tym celu należy wykonać następujące czynności:
Wyodrębnij klucz publiczny z pliku klucza o silnej nazwie do oddzielnego pliku:
Sn -p <snk_file> <outfile>
Wyświetl pełny klucz publiczny w konsoli:
Sn -tp <outfile>
Skopiuj i wklej pełną wartość klucza publicznego do kodu źródłowego.
Kompilowanie zestawu znajomego za pomocą języka C#
Jeśli kompilator języka C# jest używany do kompilowania zestawu znajomego, należy jawnie określić nazwę pliku wyjściowego (.exe lub .dll) przy użyciu opcji /out kompilatora. Jest to wymagane, ponieważ kompilator nie wygenerował jeszcze nazwy zestawu, który kompiluje w momencie powiązania z odwołaniami zewnętrznymi. Opcja /out kompilatora jest opcjonalna dla kompilatora Języka Visual Basic, a odpowiednia opcja -out lub -o kompilatora nie powinna być używana podczas kompilowania przyjaznych zestawów za pomocą kompilatora języka F#.
Kompilowanie zestawu znajomego za pomocą języka C++
W języku C++, aby element wewnętrzny był włączony przez InternalsVisibleToAttribute atrybut dostępny dla zestawu znajomego, należy użyć atrybutu as_friend
w dyrektywie C++. Aby uzyskać więcej informacji, zobacz Friend Assemblies (C++).