检测ASCX/ASPX是否在SharePoint中运行?

Ste*_*ner 1 asp.net sharepoint

我们有一组代码将在独立的ASP.NET和SharePoint中使用.我想知道是否有合法的方法在CS文件中编写条件代码来检测SharePoint是否存在?

它需要能够在OnPreInit中或之前运行,因为基于此决定,我们将切换MasterPageFile属性,这需要在页面生命周期的早期完成.

我想我可以做一些事情,比如检查"〜/ layouts"目录的存在等,但必须有更好的方法来做到这一点.此外,谁知道 - 出于兼容性原因(图像的位置等),我们可能实际上采用ASP.NET独立模式中的SharePoint目录结构.

即使在独立运行时大部分未使用Microsoft.SharePoint.DLL也可以.

谢谢!

Joh*_*n G 7

由于您被允许引用Microsoft.SharePoint:

using Microsoft.SharePoint;
// ...

if (SPContext.Current == null)
    // Not running in SharePoint
else
    // Running in SharePoint
Run Code Online (Sandbox Code Playgroud)

编辑 - NullReferenceException考虑的替代方法:

bool runningInSharePoint = false;
try
{
    if (SPContext.Current != null)
        runningInSharePoint = true;
}
catch (NullReferenceException e)
{
    // SharePoint is not present on the system
}
Run Code Online (Sandbox Code Playgroud)

以上假设您在访问SPContext时抛出了您提到的异常,而不是更早.