检测我是否在SharePoint中运行

时间:2011-06-03 20:11:52

标签: .net sharepoint reflection sharepoint-2010

我的ASP.net应用程序是否有办法知道它是否在SharePoint(2010)中运行,但没有引用SharePoint程序集? (所以我不能只检查SPContext.Current是否为null)。

我想知道按名称加载所有程序集是否可行?因此,如果我看到我的AppDomain包含Microsoft.SharePoint程序集,那么我知道我在SharePoint中。

用例:程序集也在SharePoint之外运行,但引用SharePoint DLL需要部署它们(不是可能由于许可)或在访问SharePoint方法时获取异常。

目前我使用条件编译,但我想摆脱它并使用DI机制来选择两个类中的一个,这取决于我是否在SharePoint中。

2 个答案:

答案 0 :(得分:9)

bool isSharepoint =
     AppDomain
        .CurrentDomain
        .GetAssemblies()
        .Any(a => new AssemblyName(a.FullName).Name == "Microsoft.SharePoint");

未经测试,但这会检查名为Microsoft.SharePoint的已加载程序集。

答案 1 :(得分:1)

一种方法是检查当前进程的命令行参数(w3wp.exe)并查找“-ap”SharePoint内容AppPool“。就个人而言,我更喜欢您提到的方法(寻找Microsoft.SharePoint。 dll assembly)。