我们有一组将在独立ASP.NET和SharePoint中使用的代码。我想知道是否有合法的方法在CS文件中编写条件代码来检测SharePoint是否存在?
它需要能够在OnPreInit中或之前运行,因为根据这个决定,我们将切换MasterPageFile属性,这需要在页面生命周期的早期完成。
我想我可以做一些事情,比如检查“〜/ layouts”目录的存在等,但必须有更好的方法来做到这一点。此外,谁知道 - 出于兼容性原因(图像的位置等),我们可能实际上采用ASP.NET独立模式中的SharePoint目录结构。
即使在独立运行时大部分未使用Microsoft.SharePoint.DLL也可以。
谢谢!
答案 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所需的额外代码。