我在.Net 4.5中使用C#创建一个插件系统,通过Mono 4.2.1在linux机器上运行。插件系统的一部分要求为每个插件使用单独的AppDomain以允许动态权限和插件的修改。但是,我无法使用除FullTrust之外的任何PermissionSet创建AppDomain,这违背了使用AppDomains的全部目的。在我的Windows机器上,权限工作正常,这增加了混乱。以下是我创建AppDomain的方式:
PermissionSet ps1 = new PermissionSet(PermissionState.None);
ps1.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));
AppDomainSetup ads1 = new AppDomainSetup();
ads1.ApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
AppDomain dom = AppDomain.CreateDomain("path/to/plugin/here", null, ads1, ps1, null);
看起来很简单。如果我在Windows上运行它,我会得到一个仅具有执行权限的AppDomain。但是,通过Mono运行它给了我一个具有完全信任权限的AppDomain。我查看了Mono source code for AppDomains,似乎无法找出权限出错的位置。
我还尝试反思新创建的AppDomain以更改“#granted”#39;字段,它应该将来的调用更改为dom.PermissionSet,但这似乎仍未受影响。
任何人都能洞察出错的原因和原因?