Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 zakreseminternal w języku C# lub Friend 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łasnej asemblei lub typach, które pochodzą od ich zawierającej klasy. 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ą od ich zawierającej klasy 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 elementów internal (Friend w Visual Basic), protected internal (Protected Friend w Visual Basic) i private protected (Private Protected w Visual Basic), ale nie private.
Uwaga / Notatka
W przypadku członków private protected (Private Protected w Visual Basic) atrybut InternalsVisibleToAttribute rozszerza dostępność tylko dla typów, które dziedziczą z zawierającej klasy członka.
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 składowych bieżącego zestawu. Możesz zdefiniować wiele zestawów przyjacielskich 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 bieżące zestawienie, jak i przyjacielskie zestawienie muszą być niepodpisane, lub oba zestawienia muszą być podpisane z użyciem silnej nazwy.
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 InternalsVisibleToAttribute z zestawami o silnych nazwach, zobacz konstruktor InternalsVisibleToAttribute.
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 tego jako błędu (takiego jak asembler IL (ILAsm.exe)), a zestawy mają silne nazwy, to wyjątek MethodAccessException jest zgłaszany przy pierwszym dostępie do wskazanego zestawu znajomego, który zawiera atrybut InternalsVisibleToAttribute.
Aby uzyskać więcej informacji na temat używania tego atrybutu, zobacz Przyjazne zestawy oraz przyjazne zestawy języka C++.
Pobierz pełny klucz publiczny
Możesz użyć narzędzia Strong Name Tool (Sn.exe), aby pobrać pełny klucz publiczny z pliku klucza silnie nazwanego (.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.
Skompiluj zestaw "friend assembly" za pomocą języka C#
Jeśli używasz kompilatora języka C# do kompilowania asembli znajomego, musisz jawnie określić nazwę pliku wyjściowego (.exe lub .dll) przy użyciu opcji kompilatora /out. 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#.
Kompilacja zaprzyjaźnionego zestawu za pomocą języka C++
W języku C++ elementy wewnętrzne, które są uaktywnione przez atrybut InternalsVisibleToAttribute, muszą być dostępne dla zestawu przyjacielskiego poprzez zastosowanie atrybutu as_friend w dyrektywie C++. Aby uzyskać więcej informacji, zobacz Friend Assemblies (C++).