DynamicMethod.IsSecurityCritical Proprietà

Definizione

Ottiene un valore che indica se il metodo dinamico corrente è critico per la sicurezza o critico per la sicurezza e pertanto può eseguire operazioni critiche.

public:
 virtual property bool IsSecurityCritical { bool get(); };
public override bool IsSecurityCritical { get; }
member this.IsSecurityCritical : bool
Public Overrides ReadOnly Property IsSecurityCritical As Boolean

Valore della proprietà

true se il metodo dinamico corrente è critico per la sicurezza o critico per la sicurezza; false se è trasparente.

Eccezioni

Il metodo dinamico non ha un corpo del metodo.

Commenti

Le IsSecurityCriticalproprietà , IsSecuritySafeCriticale IsSecurityTransparent segnalano il livello di trasparenza del metodo dinamico come determinato da Common Language Runtime (CLR). Le combinazioni di queste proprietà sono illustrate nella tabella seguente:

Livello di sicurezza ÈCriticoPerLaSicurezza IsSecuritySafeCritical IsSecurityTransparent
Critico true false false
Sicurezza critica true true false
Transparent false false true

L'uso di queste proprietà è molto più semplice rispetto all'analisi delle annotazioni di sicurezza di un assembly e dei relativi tipi, al controllo del livello di attendibilità corrente e al tentativo di duplicare le regole del runtime.

La trasparenza di un metodo dinamico dipende dal modulo a cui è associato. Se il metodo dinamico è associato a un tipo anziché a un modulo, la trasparenza dipende dal modulo che contiene il tipo. I metodi dinamici non dispongono di annotazioni di sicurezza, pertanto vengono assegnate la trasparenza predefinita per il modulo associato.

  • I metodi dinamici ospitati in modo anonimo sono sempre trasparenti, perché il modulo fornito dal sistema che li contiene è trasparente.

  • La trasparenza di un metodo dinamico associato a un assembly attendibile, ovvero un assembly con nome sicuro installato nella Global Assembly Cache, è descritto nella tabella seguente.

    Annotazione di assemblaggio Trasparenza di livello 1 Trasparenza di livello 2
    Completamente trasparente Transparent Transparent
    Completamente critico Critico Critico
    Trasparenza mista Transparent Transparent
    Neutrale alla sicurezza Critico per la sicurezza Critico

    Ad esempio, se si associa un metodo dinamico a un tipo in mscorlib.dll, con trasparenza mista di livello 2, il metodo dinamico è trasparente e non può eseguire codice critico. Per informazioni sui livelli di trasparenza, vedere codiceSecurity-Transparent, livello 1 e codiceSecurity-Transparent, livello 2.

    Annotazioni

    L'associazione di un metodo dinamico a un modulo in un assembly di livello 1 attendibile indipendente dalla sicurezza, ad esempio System.dll, non consente l'elevazione dell'attendibilità. Se il set di concessioni del codice che chiama il metodo dinamico non include il set di concessioni di System.dll ,ovvero l'attendibilità completa, SecurityException viene generata quando viene chiamato il metodo dinamico.

  • La trasparenza di un metodo dinamico associato a un assembly parzialmente attendibile dipende dalla modalità di caricamento dell'assembly. Se l'assembly viene caricato con attendibilità parziale, ad esempio in un dominio dell'applicazione in modalità sandbox, il runtime ignora le annotazioni di sicurezza dell'assembly. L'assemblaggio e tutti i suoi tipi e membri, inclusi i metodi dinamici, sono considerati trasparenti. Il runtime presta attenzione alle annotazioni di sicurezza solo se l'assembly parzialmente attendibile viene caricato con piena attendibilità, ad esempio nel dominio applicativo predefinito di un'applicazione desktop. In tal caso, il runtime assegna al metodo dinamico la trasparenza predefinita per i metodi in base alle annotazioni dell'assembly.

Per ulteriori informazioni su Reflection Emit e la trasparenza, vedere Problemi di sicurezza in Reflection Emit. Per informazioni sulla trasparenza, vedere Modifiche alla sicurezza.

Si applica a

Vedi anche