Compatibilidad con la directiva de seguridad de acceso del código y migración

La parte de la directiva de seguridad de acceso del código (CA) ha quedado obsoleta en .NET Framework versión 4. Por tanto, puede encontrarse con advertencias de compilación y excepciones en tiempo de ejecución si llama a tipos y miembros obsoletos de la directiva de forma explícita o implícita (a través de otros tipos y miembros).

Puede evitar las advertencias y errores de las siguientes maneras:

Este tema contiene las siguientes secciones:

  • Uso explícito

  • Uso implícito

  • Errores y advertencias

  • Migración: reemplazo para las llamadas obsoletas

  • Compatibilidad: usar la opción heredada de directiva CAS

Uso explícito

Los miembros que manipulan directamente la directiva de seguridad o necesitan la directiva CAS para incluirla en el espacio aislado están obsoletos y generarán errores de forma predeterminada.

He aquí algunos ejemplos:

Uso implícito

Varias sobrecargas de carga de ensamblados producen errores debido a su uso implícito de la directiva CAS. Estas sobrecargas toman un parámetro Evidence que se usa para resolver la directiva CAS y proporcionar un conjunto de permisos concedidos para un ensamblado.

A continuación se muestran algunos ejemplos. Las sobrecargas obsoletas son las que toman Evidence como parámetro:

Errores y advertencias

Los tipos y miembros obsoletos generan los siguientes mensajes de error cuando se usan. Tenga en cuenta que el propio tipo System.Security.Policy.Evidence no está obsoleto.

Advertencia en tiempo de compilación:

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.'

Excepción en tiempo de ejecución:

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.

Migración: reemplazo para las llamadas obsoletas

Determinar el nivel de confianza de un ensamblado

La directiva CAS suele emplearse para determinar el conjunto de permisos concedidos o el nivel de confianza de un ensamblado o de un dominio de aplicación. .NET Framework 4 expone las siguientes propiedades útiles que no necesitan resolver la directiva de seguridad:

Espacio aislado del dominio de aplicación

El método AppDomain.SetAppDomainPolicy se suele emplear para poner en el espacio aislado los ensamblados de un dominio de aplicación. .NET Framework 4 expone miembros que no tienen que usar PolicyLevel para este fin. Para obtener más información, vea Cómo: Ejecutar código de confianza parcial en un recinto.

Determinar un conjunto de permisos seguro o razonable para código de confianza parcial

A menudo, los hosts necesitan determinar los permisos adecuados para poner en el espacio aislado el código hospedado. Antes de .NET Framework 4, la directiva CAS proporcionaba una manera de hacerlo con el método SecurityManager.ResolvePolicy. En su lugar, .NET Framework 4 proporciona el método SecurityManager.GetStandardSandbox, que devuelve un conjunto de permisos seguro estándar para las pruebas proporcionadas.

Escenarios sin espacio aislado: sobrecargas para las cargas de ensamblados

La razón para usar una sobrecarga de carga de ensamblados podría ser el uso de parámetros que de lo contrario no estarían disponibles, en lugar de incluir el ensamblado en el espacio aislado. A partir de .NET Framework 4, las sobrecargas de carga de ensamblados que no necesitan un objeto System.Security.Policy.Evidence como parámetro, por ejemplo AppDomain.ExecuteAssembly(String, String[], Byte[], AssemblyHashAlgorithm), hacen posible este escenario.

Si desea poner en el espacio aislado un ensamblado, use la sobrecarga AppDomain.CreateDomain(String, Evidence, AppDomainSetup, PermissionSet, StrongName[]).

Compatibilidad: usar la opción heredada de directiva CAS

El elemento de configuración <NetFx40_LegacySecurityPolicy>le permite especificar que un proceso o una biblioteca emplea la directiva CAS heredada. Cuando se habilita este elemento, las sobrecargas de pruebas y directiva funcionan como en las versiones anteriores del marco de trabajo.

NotaNota

El comportamiento de la directiva CAS se especifica para cada versión del motor en tiempo de ejecución, por lo que modificar la directiva CAS para una versión del motor en tiempo de ejecución no afecta a la directiva CAS de otra versión.

<configuration>
   <runtime>
      <NetFx40_LegacySecurityPolicy enabled="true"/>
   </runtime>
</configuration>

Vea también

Tareas

Cómo: Ejecutar código de confianza parcial en un recinto