Share via


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:

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.

NotaNota

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