Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Anmärkning
Den här artikeln innehåller ytterligare kommentarer till referensdokumentationen för det här API:et.
Attributet InternalsVisibleToAttribute anger att typer som normalt endast visas i den aktuella sammansättningen är synliga för en angiven sammansättning.
Vanligtvis är typer och medlemmar med internal omfång i C# eller Friend omfång i Visual Basic endast synliga i sammansättningen där de definieras. Typer och medlemmar med protected internal omfång (Protected Friend omfång i Visual Basic) är endast synliga i sin egen sammansättning eller för typer som härleds från deras innehållande klass. Typer och medlemmar med private protected omfång (Private Protected omfång i Visual Basic) visas i den innehållande klassen eller i typer som härleds från deras innehållande klass i den aktuella sammansättningen
Attributet InternalsVisibleToAttribute gör dessa typer och medlemmar också synliga för typerna i en angiven sammansättning, som kallas för en vänsammansättning. Detta gäller endast internal (Friend i Visual Basic), protected internal (Protected Friend i Visual Basic) och private protected (Private Protected i Visual Basic) medlemmar, men inte private medlemmar.
Anmärkning
När det gäller private protected (Private Protected i Visual Basic) medlemmar utökar attributen InternalsVisibleToAttribute tillgängligheten endast till typer som härleds från den medlemmens innehållande klass.
Attributet tillämpas på sammansättningsnivå. Det innebär att den kan inkluderas i början av en källkodsfil eller inkluderas i AssemblyInfo-filen i ett Visual Studio-projekt. Du kan använda attributet för att ange en enda vänsamling som kan komma åt de interna typerna och medlemmarna i den aktuella samlingen. Du kan definiera flera vänsammansättningar på två sätt. De kan visas som enskilda attribut på sammansättningsnivå, vilket visas i följande exempel.
[assembly:InternalsVisibleTo("Friend1a")]
[assembly:InternalsVisibleTo("Friend1b")]
<assembly:InternalsVisibleTo("Friend1a")>
<assembly:InternalsVisibleTo("Friend1b")>
De kan också visas med separata InternalsVisibleToAttribute taggar men ett enda assembly nyckelord, vilket visas i följande exempel.
[assembly:InternalsVisibleTo("Friend2a"),
InternalsVisibleTo("Friend2b")]
<Assembly:InternalsVisibleTo("Friend2a"), _
Assembly:InternalsVisibleTo("Friend2b")>
Vänsammansättningen identifieras av InternalsVisibleToAttribute konstruktorn. Både den aktuella sammansättningen och vänsammansättningen måste vara osignerade, annars måste båda sammansättningarna signeras med ett starkt namn.
Om båda sammansättningarna är osignerade assemblyName består argumentet av namnet på vänsammansättningen, som anges utan en katalogsökväg eller filnamnstillägg.
Om båda sammansättningarna är signerade med ett starkt namn måste argumentet till InternalsVisibleToAttribute konstruktorn bestå av namnet på sammansättningen utan dess katalogsökväg eller filnamnstillägg, tillsammans med den fullständiga offentliga nyckeln (och inte dess offentliga nyckeltoken). Information om hur du hämtar den fullständiga offentliga nyckeln för en stark namngiven sammansättning finns i avsnittet Hämta den fullständiga offentliga nyckeln senare i den här artikeln. Mer information om hur du använder InternalsVisibleToAttribute med starka namngivna sammansättningar finns i InternalsVisibleToAttribute konstruktorn.
Inkludera inte värden för CultureInfofältet , Versioneller ProcessorArchitecture i argumentet. Kompilatorerna Visual Basic, C# och C++ behandlar detta som ett kompilatorfel. Om du använder en kompilator som inte behandlar den som ett fel (till exempel IL Assembler (ILAsm.exe)) och sammansättningarna är starkt namngivna utlöses ett MethodAccessException undantag första gången den angivna vänsammansättningen kommer åt sammansättningen som innehåller InternalsVisibleToAttribute attributet.
Mer information om hur du använder det här attributet finns i Vänsammansättningar och C++-vänsammansättningar.
Hämta den fullständiga offentliga nyckeln
Du kan använda verktyget Starkt namn (Sn.exe) för att hämta den fullständiga offentliga nyckeln från en stark namngiven nyckelfil (.snk). För att göra detta utför du följande steg:
Extrahera den offentliga nyckeln från den starkt namngivna nyckelfilen till en separat fil:
Sn -p <snk_file> <outfile>Visa den fullständiga offentliga nyckeln till konsolen:
Sn -tp <outfile>Kopiera och klistra in det fullständiga offentliga nyckelvärdet i källkoden.
Kompilera vänsammansättningen med C#
Om du använder C#-kompilatorn för att kompilera vänsammansättningen måste du uttryckligen ange namnet på utdatafilen (.exe eller .dll) med hjälp av kompilatoralternativet /out . Detta krävs eftersom kompilatorn ännu inte har genererat namnet på den sammansättning som skapas när den binder till externa referenser. Kompilatoralternativet /out är valfritt för Visual Basic-kompilatorn och motsvarande kompilatoralternativ -out eller -o bör inte användas när vänsammansättningar kompileras med F#-kompilatorn.
Kompilera vänsammansättningen med C++
I C++ måste du använda attributet InternalsVisibleToAttribute i C++-direktivet för att de interna medlemmarna som aktiverats med attributet as_friend ska bli tillgängliga för en vänlig sammansättning. Mer information finns i Vänsammansättningar (C++).