Код в частично доверенном домене приложения выдает System.Security.Permissions.FileIOPermission при разрешении относительного пути

Я добавляю слой песочницы в созданную мной структуру.

Основная концепция заключается в том, что фреймворк загружает библиотеки DLL, подобные плагинам.

При загрузке плагина я создаю AppDomain, чтобы изолировать выполнение, устанавливаю ApplicationBase AppDomain в каталог DLL и устанавливаю полный доступ.

Теперь проблема в том, что внутри плагинов, хотя базовый путь установлен правильно, если код пытается загрузить файл, используя его относительный путь, .net вызовет исключение System.Security.Permissions.FileIOPermission.

Однако тот же файл будет легко загружен с использованием абсолютного пути.

Я пробовал разные наборы разрешений безопасности, но никто не решает проблему загрузки относительного пути.

Вот код, который я использую:

//AppDomain creation

string directory = Path.GetDirectoryName(assemblyPath);

PermissionSet permissionSet = new PermissionSet(PermissionState.None);

permissionSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));

permissionSet.AddPermission(new FileIOPermission(FileIOPermissionAccess.AllAccess, directory));

permissionSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.Infrastructure));

AppDomainSetup appDomainSetup = new AppDomainSetup
{
   ApplicationBase = directory,

   PrivateBinPath = directory,

   PrivateBinPathProbe = directory
};

AppDomain appDomain = AppDomain.CreateDomain("Sandbox", null, appDomainSetup, permissionSet);


//Code running inside the AppDomain

string path = File.ReadAllBytes(Path.Combine(AppDomain.CurrentDomain.BaseDirectory,Path.Combine("Resources","Image.jpg"))); //Works fine

string path = Path.GetFullPath(Path.Combine("Resources","Image.jpg")); //Throws System.Security.Permissions.FileIOPermission exception

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

Может ли кто-нибудь помочь с любым решением или предложениями, пожалуйста?


person Rojan Gh.    schedule 18.04.2016    source источник


Ответы (1)


Не бери в голову,

Сам нашел ответ на свой вопрос.

Мне пришлось установить правильное значение Environment.CurrentDirectory для AppDomain.

person Rojan Gh.    schedule 21.04.2016