Migrazione e compatibilità dei criteri di sicurezza dall'accesso di codice
Gli aspetti relativi ai criteri di sicurezza per l'accesso al codice sono diventati obsoleti a partire da .NET Framework versione 4. Di conseguenza, potrebbero verificarsi avvisi di compilazione ed eccezioni di runtime se si chiamano i membri e i tipi dei criteri obsoleti in modo esplicito o implicito (tramite altri tipi e membri).
È possibile evitare gli avvisi e gli errori nei modi seguenti:
Eseguendo la migrazione alle sostituzioni di .NET Framework 4 per le chiamate obsolete.
- oppure -
Utilizzando l'elemento di configurazione <NetFx40_LegacySecurityPolicy> per acconsentire esplicitamente al comportamento dei criteri di sicurezza dall'accesso di codice legacy.
Di seguito sono elencate le diverse sezioni di questo argomento:
Utilizzo esplicito
Utilizzo implicito
Errori e avvisi
Migrazione: sostituzione delle chiamate obsolete
Compatibilità: utilizzo dell'opzione legacy relativa ai criteri di sicurezza per l'accesso al codice
Utilizzo esplicito
I membri che modificano direttamente i criteri di sicurezza o richiedono criteri di sicurezza per l'accesso al codice per il sandboxing sono obsoleti e comportano la generazione di errori per impostazione predefinita.
Di seguito vengono forniti alcuni esempi:
Utilizzo implicito
Numerosi assembly che caricano overload producono errori a causa dell'utilizzo implicito di criteri di sicurezza per l'accesso al codice. Questi overload accettano un parametro Evidence utilizzato per risolvere i criteri di sicurezza per l'accesso al codice e forniscono un set di autorizzazioni per un assembly.
Di seguito sono riportati alcuni esempi. Gli overload obsoleti sono quelli che accettano Evidence come parametro:
Errori e avvisi
I tipi e i membri obsoleti producono i messaggi di errore seguenti quando vengono utilizzati. Si noti che il tipo System.Security.Policy.Evidence non è obsoleto.
Associazione in fase di compilazione:
warning CS0618: '<API Name>' is obsolete: 'This method is obsolete and will be removed in a future release of the .NET Framework. Please use <suggested alternate API>. See <link> for more information.'
Eccezioni in fase di esecuzione:
NotSupportedException: This method uses CAS policy, which has been obsoleted by the .NET Framework. In order to enable CAS policy for compatibility reasons, please use the <NetFx40_LegacySecurityPolicy> configuration switch. Please see <link> for more information.
Migrazione: sostituzione delle chiamate obsolete
Determinazione del livello di attendibilità di un assembly
I criteri di sicurezza per l'accesso al codice vengono spesso utilizzati per determinare il livello di attendibilità o il set di autorizzazioni di un assembly o di un dominio dell'applicazione. .NET Framework 4 espone le utili proprietà seguenti che non richiedono la risoluzione dei criteri di sicurezza:
Sandboxing di un dominio dell'applicazione
Il metodo AppDomain.SetAppDomainPolicy viene in genere utilizzato per il sandboxing degli assembly in un dominio dell'applicazione. .NET Framework 4 espone membri che non richiedono l'utilizzo di PolicyLevel per questo scopo. Per ulteriori informazioni, vedere Procedura: eseguire codice parzialmente attendibile in un oggetto sandbox.
Determinazione di un set di autorizzazioni ragionevoli o sicure per codice parzialmente attendibile
Gli host devono spesso determinare le autorizzazioni appropriate per il sandboxing del codice ospitato. Prima di .NET Framework 4, i criteri di sicurezza dall'accesso di codice fornivano, a tale scopo, il metodo SecurityManager.ResolvePolicy. Al suo posto, .NET Framework 4 fornisce il metodo SecurityManager.GetStandardSandbox, che restituisce un set di autorizzazioni standard sicuro per l'evidenza fornita.
Scenari senza sandboxing: overload per i caricamenti di assembly
Il motivo per l'utilizzo di un overload per il caricamento di un assembly potrebbe essere l'utilizzo di parametri che non sono altrimenti disponibili, anziché l'esecuzione del sandboxing dell'assembly. A partire da .NET Framework 4, questo scenario è consentito dagli overload di caricamento degli assembly che non richiedono un oggetto System.Security.Policy.Evidence come parametro ad esempio, AppDomain.ExecuteAssembly(String, String[], Byte[], AssemblyHashAlgorithm).
Se si desidera eseguire il sandboxing di un assembly, utilizzare il metodo AppDomain.CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, StrongName[]).
Compatibilità: utilizzo dell'opzione legacy relativa ai criteri di sicurezza per l'accesso al codice
L'elemento di configurazione < NetFx40_LegacySecurityPolicy > consente di specificare che un processo o una libreria utilizza criteri di sicurezza per l'accesso al codice legacy. Quando si abilita questo elemento, gli overload relativi ai criteri e all'evidenza funzionano in modo analogo a quanto avveniva nelle versioni precedenti del framework.
Nota |
---|
Il comportamento dei criteri di sicurezza per l'accesso al codice viene specificato per ogni versione runtime, pertanto la modifica di questi criteri per una versione runtime non influisce sui criteri di sicurezza per l'accesso al codice di un'altra versione. |
<configuration>
<runtime>
<NetFx40_LegacySecurityPolicy enabled="true"/>
</runtime>
</configuration>
Vedere anche
Attività
Procedura: eseguire codice parzialmente attendibile in un oggetto sandbox