我的ASP.net应用程序是否有办法知道它是否在SharePoint(2010)中运行,但没有引用SharePoint程序集? (所以我不能只检查SPContext.Current是否为null)。
我想知道按名称加载所有程序集是否可行?因此,如果我看到我的AppDomain包含Microsoft.SharePoint程序集,那么我知道我在SharePoint中。
用例:程序集也在SharePoint之外运行,但引用SharePoint DLL需要部署它们(不是可能由于许可)或在访问SharePoint方法时获取异常。
目前我使用条件编译,但我想摆脱它并使用DI机制来选择两个类中的一个,这取决于我是否在SharePoint中。
答案 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)。