Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Zestaw friend (ang. "friend assembly") to biblioteka, która może uzyskiwać dostęp do typów i elementów członkowskich innego zestawu oznaczonych jako internal (C#) lub Friend (Visual Basic). Jeśli dodasz atrybut zestawu do AssemblyA, aby zidentyfikować AssemblyB jako przyjazny zestaw, nie musisz już oznaczać typów i elementów członkowskich w AssemblyA jako publiczne, aby były one dostępne przez AssemblyB. Jest to szczególnie wygodne w następujących scenariuszach:
Podczas testowania jednostkowego, gdy kod testowy jest uruchamiany w osobnym zestawie, ale wymaga dostępu do elementów członkowskich w zestawie testowanym, które są oznaczone jako
internal
w języku C# lubFriend
w języku Visual Basic.Podczas tworzenia biblioteki klas dodatki do biblioteki znajdują się w osobnych zestawach, ale wymagają dostępu do składowych w istniejących zestawach, które w języku C# oznaczone są jako
internal
lub w Visual Basic jakoFriend
.
Uwagi
Atrybutu InternalsVisibleToAttribute można użyć do identyfikowania co najmniej jednego zestawu zaprzyjaźnionego dla danego zestawu. W poniższym przykładzie użyto atrybutu InternalsVisibleToAttributeAssemblyA i określono zestaw assemblyB jako przyjazny zestaw. Zapewnia to zestawowiB dostęp do wszystkich typów i elementów członkowskich w zestawie A , które są oznaczone jako internal
w języku C# lub Friend
Visual Basic.
Uwaga / Notatka
Podczas kompilowania zestawu, takiego jak AssemblyB , który będzie uzyskiwać dostęp do typów wewnętrznych lub wewnętrznych elementów członkowskich innego zestawu, takiego jak AssemblyA, 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. Aby uzyskać więcej informacji, zobacz OutputAssembly (C#) lub -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
Tylko zestawy, które jawnie określisz jako zaprzyjaźnione, mogą uzyskiwać dostęp do typów i elementów członkowskich internal
(C#) lub Friend
(Visual Basic). Na przykład, jeśli AssemblyB jest przyjacielem Assembly A, a zestaw C odwołuje się do AssemblyB, to zestaw C nie ma dostępu do typów internal
(C#) ani Friend
(Visual Basic) w Assembly A.
Kompilator wykonuje podstawową walidację nazwy zestawu docelowego podanego do atrybutu InternalsVisibleToAttribute . Jeśli zestaw A deklaruje AssemblyB jako zestaw przyjazny, reguły walidacji są następujące:
Jeśli zestaw A ma silną nazwę, funkcja AssemblyB musi również mieć silną nazwę. Przyjazna nazwa zestawu przekazywana do atrybutu musi składać się z nazwy zestawu i klucza publicznego klucza silnej nazwy używanego do podpisywania AssemblyB.
Przyjazna nazwa zestawu przekazywana do atrybutu InternalsVisibleToAttribute nie może być silną nazwą zestawuB. Nie uwzględniaj wersji zestawu, kultury, architektury ani identyfikatora klucza publicznego.
Jeśli zestaw A nie ma silnej nazwy, nazwa zestawu przyjaznego powinna składać się tylko z nazwy zestawu. Aby uzyskać więcej informacji, zobacz How to: Create unsigned friend assemblies (Instrukcje: tworzenie zestawów niepodpisanych znajomych).
Jeśli AssemblyB ma silną nazwę, należy określić klucz silnej nazwy dla AssemblyB przy użyciu ustawienia projektu lub opcji kompilatora wiersza polecenia
/keyfile
. Aby uzyskać więcej informacji, zobacz How to: Create signed friend assemblies (Instrukcje: tworzenie podpisanych zestawów zaprzyjaźnionych).
Klasa StrongNameIdentityPermission zapewnia również możliwość udostępniania typów z następującymi różnicami:
StrongNameIdentityPermission dotyczy pojedynczego typu, podczas gdy zaprzyjaźnione zestawienie dotyczy całego zestawu.
Jeśli w zestawie A istnieją setki typów, które chcesz udostępnić zestawowiB, musisz dodać StrongNameIdentityPermission je do wszystkich. Jeśli używasz zaprzyjaźnionego zestawu, musisz zadeklarować relację zaprzyjaźnienia tylko raz.
Jeśli używasz metody StrongNameIdentityPermission, typy, które chcesz udostępnić, muszą być zadeklarowane jako publiczne. Jeśli używasz zestawu typu "friend", udostępnione typy są deklarowane jako
internal
(C#) lubFriend
(Visual Basic).
Aby uzyskać informacje na temat uzyskiwania dostępu do typów i metod zestawu internal
(C#) lub Friend
(Visual Basic) z pliku modułu (pliku z rozszerzeniem .netmodule ), zobacz ModuleAssemblyName (C#) lub -moduleassemblyname (Visual Basic).