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# lubFriendzakres 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:

  1. Wyodrębnij klucz publiczny z pliku klucza o silnej nazwie do oddzielnego pliku:

    Sn -p <snk_file> <outfile>

  2. Wyświetl pełny klucz publiczny w konsoli:

    Sn -tp <outfile>

  3. 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++).