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

时间:2009-06-16 21:51:29

标签: asp.net sharepoint

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

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:7)

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

using Microsoft.SharePoint;
// ...

if (SPContext.Current == null)
    // Not running in SharePoint
else
    // Running in SharePoint

修改 - 考虑NullReferenceException的替代方法:

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

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

答案 1 :(得分:2)

我想知道你是否最好不要在你的直接ASP.NET代码中包含SharePoint dll。 如果您对SharePoint位进行部分/子类并包含两个构建目标,则应该能够在不增加ASP.NET构建的情况下使用SharePoint所需的额外代码。