是否可以从解决方案内检查它是否被用作沙盒,例如这样的东西:

if(this.IamSandboxedSolution)
    // do something
else
    // do something else
有帮助吗?

解决方案

不开箱即用的afaik。

您可以这样检查:

if(AppDomain.CurrentDomain.FriendlyName ==
    "Sandboxed Code Execution Partially Trusted Asp.net AppDomain") {
    // I'm playing in the sandbox!
}

其他提示

不幸的是,Afaik没有任何万无一失的方法可以做到这一点。我知道Microsoft的SharePoint模式和实践团队正在使用:

AppDomain.CurrentDomain.FriendlyName.Contains("Sandbox")

因此,如果这是他们想出的最好的,那么公平地说,这是一样的。显然,某些静态辅助方法是要走的方式,而不是通过您的代码乱扔垃圾。

编辑:恕我直言,这对于运行一些禁止代码和捕获例外的原因是最可取的。

另一种同样的技巧方法是尝试执行在沙箱中不允许的事情并捕获由此产生的例外。这样的事情:

static bool? _isSandboxed;
static bool IsSandboxed() {
    if(!_isSandboxed.HasValue) {
        try {
            SPSecurity.RunWithElevatedPrivileges(delegate { });
            _isSandboxed = false;
        } catch (PolicyException) {
            _isSandboxed = true;
        }
    }
    return _isSandboxed.Value;
}
许可以下: CC-BY-SA归因
scroll top