我目前使用MAF创建一个加载项模型,其中加载项加载在受限制的AppDomain(Internet权限)中。这意味着加载项无法在大多数情况下调用我们想要的数据库,因为我们希望阻止加载项作者直接针对数据库运行任何查询。
我们希望他们使用某种形式的主机API,以允许他们执行某些任务(例如,运行非常具体的查询或发送电子邮件)。谁能告诉我最好的方法呢?
我尝试设置AppDomain,以便在以受限制的方式运行加载项时将包含主机API的程序集视为完全信任程序集,但是当我尝试打开数据库连接时仍然会获得SecurityExceptions。
答案 0 :(得分:1)
好的,我已经设法解决了这个问题。对于需要了解的人:
在每个方法开始时要求完全信任,您需要升级权限,然后直接删除需求。下面的代码提供了一个方法,该方法接受将以完全信任的方式运行的委托。
/// <summary>
/// Runs the supplied delegate using full trust
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="func"></param>
/// <returns></returns>
private static T RunWithFullTrust<T>(Func<T> func)
{
//NOTE: This line grants the method full trust
new PermissionSet(PermissionState.Unrestricted).Assert();
T result = func();
//Undo the grant for full-trust!
CodeAccessPermission.RevertAssert();
return result;
}
此外,在加载任何加载项之前,请确保将Host API加载到受限制的AppDomain中。这样可以避免无法找到Host API程序集的异常。