2012-06-06 5 views
7

Я пытаюсь создать изолированный домен приложения. Для этого я использую AppDomain.CreateDomain, предоставляя путь к DLL для песочницы..net 4 частичное доверие сборки от GAC

Однако я заметил, что если эта DLL находится в GAC, тогда DLL полностью доверяет, поэтому, если там будет PermissionSet.Assert, он может получить неограниченный доступ.

Итак, мне было интересно, если есть способ либо

  1. сила DLL, чтобы загрузить с пути, а не из GAC, таким образом, она будет частичной доверять.
  2. или - отметьте определенную DLL в GAC для частичной проверки.

Спасибо!

ответ

1

Если обе сборки полностью подписаны, тогда CLR будет использовать тот, что находится в GAC. Если вы оставите одно в целевом пути без знака, CLR будет использовать его вместо этого.

Если это не вариант, вам необходимо использовать один из переопределений CreateDomain, где вы можете определить набор разрешений, необходимый для сборки. Более подробную информацию об этом можно найти здесь: http://msdn.microsoft.com/en-us/library/ms130766.aspx.

Пример использования в качестве взятого из 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

davewinter (http://davedewinter.com/2009/05/22/how-to-host-a-partial-trust -sandbox /) больше недоступна. Есть ли зеркало к ссылке? – Oli4

Смежные вопросы