Как проверить, работает ли код в качестве решения в песочнице?
-
16-10-2019 - |
Вопрос
Можно ли проверить из решения, было ли оно развернуто в виде песочницы или нет, например, что -то вроде этого:
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 Matters & Practices использует:
AppDomain.CurrentDomain.FriendlyName.Contains("Sandbox")
Так что, если это лучшее, что они придумали, справедливо сказать, что это так же хорошо, как и. Очевидно, что какой -то статический вспомогательный метод - это путь, а не проходить эту проверку через ваш код.
РЕДАКТИРОВАТЬ: ИМХО это гораздо предпочтительнее запуска некоторого запретного кода и поймать исключение из -за причин PERF.
Другим одинаково хакерским подходом было бы попытаться сделать что -то, что не допускается в песочнице, и поймать полученное исключение. Что-то вроде этого:
static bool? _isSandboxed;
static bool IsSandboxed() {
if(!_isSandboxed.HasValue) {
try {
SPSecurity.RunWithElevatedPrivileges(delegate { });
_isSandboxed = false;
} catch (PolicyException) {
_isSandboxed = true;
}
}
return _isSandboxed.Value;
}