2012-06-06 18 views
7

Estoy intentando crear un dominio de aplicación de espacio aislado. Para lograr esto, estoy usando el AppDomain.CreateDomain, dando la ruta de acceso de la DLL para que sea sandboxed..net 4 confía parcialmente en un ensamblado de GAC

Sin embargo, noté que si esa DLL está en el GAC, entonces la DLL es totalmente confiable, por lo tanto, si hay un PermissionSet.Assert allí, puede recibir acceso sin restricciones.

Por lo tanto, me preguntaba si hay una manera de cualquiera

  1. fuerza de la DLL para cargar desde el camino, y no desde el GAC, por lo que será es de confianza parcial.
  2. o - marque una cierta DLL en el GAC para ser parcialmente confiable.

¡Gracias!

Respuesta

1

Si ambos ensambles están completamente firmados, entonces el CLR usará el del GAC. Si deja el que está en la ruta de destino sin firmar, el CLR usará ese en su lugar.

Si esa no es una opción, entonces necesita usar una de las excepciones de CreateDomain donde puede definir el conjunto de permisos que necesitará el ensamblado. Puede encontrar más información sobre la anulación aquí: http://msdn.microsoft.com/en-us/library/ms130766.aspx.

Un ejemplo del uso como tomado de http://davedewinter.com/2009/05/22/how-to-host-a-partial-trust-sandbox/ ...

static void RunInPartialTrust() 
{ 
    AppDomainSetup setup = new AppDomainSetup 
    { 
     ApplicationBase = Environment.CurrentDirectory 
    }; 

    PermissionSet permissions = new PermissionSet(null); 
    permissions.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution)); 
    permissions.AddPermission(new ReflectionPermission(ReflectionPermissionFlag.RestrictedMemberAccess)); 
    AppDomain appDomain = AppDomain.CreateDomain(
     "Partial Trust AppDomain", 
     null, 
     setup, 
     permissions 
    ); 

    Program p = (Program)appDomain.CreateInstanceAndUnwrap(
     typeof(Program).Assembly.FullName, 
     typeof(Program).FullName 
    ); 

    p.PartialTrustMain(); 
} 
+0

El davewinter (http://davedewinter.com/2009/05/22/how-to-host-a-partial-trust -sandbox /) ya no es accesible. ¿Hay un espejo en el enlace? – Oli4

Cuestiones relacionadas