Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Az ismerős szerelvény olyan szerelvény, amely hozzáférhet egy másik szerelvény belső (C#) vagy Barát (Visual Basic) típusaihoz és tagjaihoz. Ha szerelvényattribútumot ad hozzá a AssemblyA-hoz , hogy ismerős szerelvényként azonosíthassa a AssemblyB-t , többé nem kell nyilvánosként megjelölnie a AssemblyA típusait és tagjait ahhoz, hogy a AssemblyB hozzáférhessen hozzájuk. Ez különösen kényelmes a következő helyzetekben:
Az egységtesztelés során, amikor a tesztkód külön szerelvényben fut, de hozzáférést igényel a tesztelt szerelvény azon tagjaihoz, amelyek C# vagy
internalVisual Basic formátumban vannak megjelölveFriend.Amikor egy osztálykönyvtárat fejleszt, és a könyvtár kiegészítései külön assembly-kben találhatók, de ezek hozzáférést igényelnek a meglévő assembly-k azon tagjaihoz, amelyek C#-ban
internalvagy Visual Basic-benFriendjelöltek.
Megjegyzések
Az InternalsVisibleToAttribute attribútum segítségével azonosíthat egy vagy több barát-összeállítást egy adott összeállításhoz. Az alábbi példa a InternalsVisibleToAttributeAssemblyA attribútumát használja, és a assembly AssemblyB-t adja meg barát-szerelvényként. Ez hozzáférést biztosít a AssemblyB-nek az Assembly A-ban található összes olyan típushoz és taghoz, amelyeket C#-ban internal, vagy Visual Basic-ban Friend jelöl.
Megjegyzés:
Amikor olyan szerelvényt állít össze, mint a AssemblyB , amely egy másik szerelvény belső típusaihoz vagy belső tagjaihoz, például a AssemblyA-hoz fog hozzáférni, a kimeneti fájl nevét (.exe vagy .dll) a -out fordító beállítással kell megadnia. Erre azért van szükség, mert a fordító még nem hozta létre annak az összetevőnek a nevét, amelyet készít, amikor a külső hivatkozásokhoz való kötés történik. További információ: OutputAssembly (C#) vagy -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
Csak az explicit módon barátként megadott szerelvények férhetnek hozzá internal (C#) illetve Friend (Visual Basic) típusokhoz és tagokhoz. Ha például a AssemblyB az A szerelvény barátja, és a C szerelvénya AssemblyB-ra hivatkozik, a C szerelvény nem rendelkezik hozzáféréssel az internal (C#) vagy Friend (Visual Basic) típusaihoz .
A fordító elvégzi az attribútum InternalsVisibleToAttribute számára átadott barátszerelvény nevének alapvető ellenőrzését. Ha az A szerelvény a AssemblyB-t baráti szerelvényként deklarálja, az érvényesítési szabályok a következők:
Ha a Assembly A strong name-mel rendelkezik, a AssemblyB-nek is strong name-mel kell rendelkeznie. Az attribútumnak átadott barát-szerelvénynévnek tartalmaznia kell a szerelvény nevét és a AssemblyB aláírásához használt erős névkulcs nyilvános kulcsát.
Az attribútumnak InternalsVisibleToAttribute átadott barát-assembly neve nem lehet a AssemblyB erős neve. Ne tartalmazza az összeállítás verzióját, a kultúrát, az architektúrát vagy a nyilvános kulcs tokenjét.
Ha az A szerelvény neve nem erős, a barát szerelvény nevének csak a szerelvény nevét kell tartalmaznia. További információ : Útmutató: Aláíratlan ismerősi szerelvények létrehozása.
Ha a AssemblyB neve erős, a projektbeállítással vagy a parancssori fordító beállítással meg kell adnia a
/keyfileerős névkulcsát. További információért lásd: Aláírt barátösszeállítások létrehozása.
Az StrongNameIdentityPermission osztály a következő különbségekkel is lehetővé teszi a típusok megosztását:
StrongNameIdentityPermission egyéni típusra vonatkozik, míg egy barát-összeállítás az egész összeállításra vonatkozik.
Ha az Assembly A-ban több száz típust szeretne megosztani a AssemblyB-vel, mindegyikhez hozzá kell adnia StrongNameIdentityPermission. Ha barátösszeállítást használ, csak egyszer kell deklarálnia a barátkapcsolatot.
Ha használja StrongNameIdentityPermission, a megosztani kívánt típusokat nyilvánosként kell deklarálni. Ha ismerős szerelvényt használ, a megosztott típusok C# esetén
internalvagy Visual Basic eseténFriendnéven vannak deklarálva.
Az információkért, hogy hogyan érhetjük el egy szerelvény internal (C#) vagy Friend (Visual Basic) típusait és metódusait egy modulfájlból (amely .netmodule kiterjesztésű), nézze meg a ModuleAssemblyName (C#) vagy -moduleassemblyname (Visual Basic) témakört.