Comment vérifier si le code est en cours d'exécution en tant que solution sandbox?
-
16-10-2019 - |
Question
Est-il possible de vérifier, à partir de la solution, si elle a été déployée comme sandbox ou non, par exemple quelque chose comme ceci:
if(this.IamSandboxedSolution)
// do something
else
// do something else
La solution
Pas hors-the-box AFAIK.
Vous pouvez le vérifier comme ceci:
if(AppDomain.CurrentDomain.FriendlyName ==
"Sandboxed Code Execution Partially Trusted Asp.net AppDomain") {
// I'm playing in the sandbox!
}
Autres conseils
AFAIK il n'y a aucun moyen infaillible de le faire, malheureusement. Je sais modèles SharePoint de Microsoft et l'équipe des pratiques utilisent:
AppDomain.CurrentDomain.FriendlyName.Contains("Sandbox")
Donc, si c'est le meilleur qu'ils ont viennent avec, il est juste de dire qui est aussi bon qu'il obtient. De toute évidence, une méthode d'aide statique est la voie à suivre plutôt que d'avoir ce chèque jonché par votre code.
EDIT:. À mon humble avis ce qui est loin préférable à l'exécution d'un code interdit et attraper l'exception, pour des raisons de perf
Une autre approche également hacky serait d'essayer de faire quelque chose qui n'est pas autorisé dans le bac à sable et attraper l'exception résultant. Quelque chose comme ceci:
static bool? _isSandboxed;
static bool IsSandboxed() {
if(!_isSandboxed.HasValue) {
try {
SPSecurity.RunWithElevatedPrivileges(delegate { });
_isSandboxed = false;
} catch (PolicyException) {
_isSandboxed = true;
}
}
return _isSandboxed.Value;
}