Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo fornisce osservazioni supplementari alla documentazione di riferimento per questa API.
L'attributo InternalsVisibleToAttribute specifica che i tipi normalmente visibili solo all'interno dell'assembly corrente sono visibili a un assembly specificato.
In genere, i tipi e i membri con internal ambito in C# o Friend ambito in Visual Basic sono visibili solo nell'assembly in cui sono definiti. I tipi e i membri con protected internal ambito (Protected Friend ambito in Visual Basic) sono visibili solo nel proprio assembly o per i tipi che derivano dalla loro classe contenitore. I tipi e i membri con private protected ambito (Private Protected ambito in Visual Basic) sono visibili nella classe contenitore o nei tipi che derivano dalla classe contenitore all'interno dell'assembly corrente
L'attributo InternalsVisibleToAttribute rende questi tipi e membri visibili anche ai tipi in un assembly specificato, noto come assembly amico. Ciò si applica solo ai internal membri (Friend in Visual Basic), protected internal(Protected Friend in Visual Basic) e private protected (Private Protected in Visual Basic), ma non private a quelli.
Annotazioni
Nel caso dei private protected membri (Private Protected in Visual Basic), l'attributo InternalsVisibleToAttribute estende l'accessibilità solo ai tipi che derivano dalla classe contenitore del membro.
L'attributo viene applicato a livello di assembly. Ciò significa che può essere incluso all'inizio di un file di codice sorgente oppure può essere incluso nel file AssemblyInfo in un progetto di Visual Studio. È possibile usare l'attributo per specificare un singolo assembly amico in grado di accedere ai tipi interni e ai membri dell'assembly corrente. È possibile definire più assembly di amici in due modi. Possono essere visualizzati come singoli attributi a livello di assembly, come illustrato nell'esempio seguente.
[assembly:InternalsVisibleTo("Friend1a")]
[assembly:InternalsVisibleTo("Friend1b")]
<assembly:InternalsVisibleTo("Friend1a")>
<assembly:InternalsVisibleTo("Friend1b")>
Possono anche essere visualizzati con tag separati InternalsVisibleToAttribute , ma una singola assembly parola chiave, come illustrato nell'esempio seguente.
[assembly:InternalsVisibleTo("Friend2a"),
InternalsVisibleTo("Friend2b")]
<Assembly:InternalsVisibleTo("Friend2a"), _
Assembly:InternalsVisibleTo("Friend2b")>
L'assembly amico viene identificato dal costruttore InternalsVisibleToAttribute. Sia l'assembly corrente che l'assembly amico devono essere entrambi non firmati, oppure entrambi gli assembly devono essere firmati con un nome sicuro.
Se entrambi gli assembly non sono firmati, l'argomento assemblyName è costituito dal nome dell'assembly amico, specificato senza un percorso di directory o l'estensione del nome file.
Se entrambi gli assembly sono firmati con un nome sicuro, l'argomento del InternalsVisibleToAttribute costruttore deve essere costituito dal nome dell'assembly senza il percorso della directory o l'estensione del nome file, insieme alla chiave pubblica completa (e non al token di chiave pubblica). Per ottenere la chiave pubblica completa di un assembly con nome sicuro, vedere la sezione Ottenere la chiave pubblica completa più avanti in questo articolo. Per ulteriori informazioni sull’uso di InternalsVisibleToAttribute con assembly a nome sicuro, vedere InternalsVisibleToAttribute costruttore.
Non includere valori per il campo CultureInfo, Version o ProcessorArchitecture nell'argomento; i compilatori Visual Basic, C# e C++ trattano questo come un errore del compilatore. Se si usa un compilatore che non lo considera come un errore ( ad esempio l'assembler IL (ILAsm.exe)) e gli assembly sono con nome sicuro, viene generata un'eccezione MethodAccessException la prima volta che l'assembly friend specificato accede all'assembly che contiene l'attributo InternalsVisibleToAttribute .
Per altre informazioni su come usare questo attributo, vedere Assembly Friend e assembly Friend C++.
Ottenere la chiave pubblica completa
È possibile usare lo strumento nome sicuro (Sn.exe) per recuperare la chiave pubblica completa da un file di chiave con nome sicuro (con estensione snk). A tale scopo, seguire questa procedura:
Estrarre la chiave pubblica dal file di chiave con nome sicuro in un file separato:
Sn -p <snk_file> <outfile>Visualizzare la chiave pubblica completa nella console:
Sn -tp <outfile>Copiare e incollare il valore completo della chiave pubblica nel codice sorgente.
Compilare l'assembly friend con C#
Se si usa il compilatore C# per compilare l'assembly Friend, è necessario specificare in modo esplicito il nome del file di output (.exe o .dll) usando l'opzione del compilatore /out . Questa operazione è necessaria perché il compilatore non ha ancora generato il nome per l'assembly che sta compilando al momento dell'associazione a riferimenti esterni. L'opzione del compilatore /out è facoltativa per il compilatore Visual Basic e l'opzione del compilatore -out o -o corrispondente non deve essere usata durante la compilazione di assembly Friend con il compilatore F#.
Compilare l'assembly Friend con C++
In C++, per rendere i membri interni abilitati dall'attributo InternalsVisibleToAttribute accessibile a un assembly Friend, è necessario usare l'attributo as_friend nella direttiva C++. Per altre informazioni, vedere Assembly Friend (C++).