Я хочу загрузить сборку, которая содержит один класс, который реализует интерфейс. Интерфейс имеет только один метод: «Run()».C# Предотвратить экземпляр класса сборки AppDomain из доступа к файлам
Я хочу загрузить класс внутри полностью ограниченного AppDomain и предотвратить доступ экземпляра из файла или доступа к реестру.
Это мой макет:
- Подписанные Основной проект - Нагрузки Ассамблеи, создает экземпляр и выполняет метод Run()
- Подпись C# библиотека - Просто содержит определение IProvider интерфейса
- Внешний C# Библиотека - реализует мой интерфейс в классе MyProvider
Это код, который я использую для загрузки внешней библиотеки, создания экземпляра и выполнения интерфейса metho d:
Evidence ev = new Evidence();
ev.AddHostEvidence(new Zone(SecurityZone.Internet));
PermissionSet permSet = SecurityManager.GetStandardSandbox(ev);
StrongName fullTrustAssembly = typeof(Program).Assembly.Evidence.GetHostEvidence<StrongName>();
AppDomainSetup adSetup = new AppDomainSetup()
{
ApplicationBase = Path.GetFullPath(Environment.CurrentDirectory)
};
AppDomain newDomain = AppDomain.CreateDomain("Sandbox", ev, adSetup, permSet, fullTrustAssembly);
Assembly asm = newDomain.Load(System.IO.File.ReadAllBytes("ExternalLib.dll"));
var instance = asm.CreateInstance("ExternalLib.MyProvider", true);
IProvider provider = instance as IProvider;
//Should not work, because my Assembly is accessing a file/Registry or something else
string result = provider.Run("Test");
Я хочу, чтобы последняя строка, чтобы выбросить исключение, потому что ExternalLib.dll реализует интерфейс, но доступ к моей файловой системы или изменения реестра и т.д.
Любые идеи о том, как это сделать?
HTTP : //stackoverflow.com/questions/1520113/restrict-plug-in-assembly-code-access или http://stackoverflow.com/question s/1357231/restrict-plugin-access-to-file-system-and-network-via-appdomain –