Обнаружение, если я бегу в SharePoint - PullRequest
6 голосов
/ 04 июня 2011

Может ли мое приложение ASP.net узнать, работает ли оно в SharePoint (2010), но без ссылки на сборки SharePoint?(Поэтому я не могу просто проверить, является ли SPContext.Current нулевым).

Интересно, реально ли получить все сборки, загруженные по имени?Поэтому, если я вижу, что мой AppDomain содержит сборку Microsoft.SharePoint, то я знаю, что я нахожусь в SharePoint.

Вариант использования: сборка также выполняется вне SharePoint, но для ссылки на библиотеки DLL SharePoint требуется их развертываниевозможно из-за лицензирования) или получения исключений при доступе к методу SharePoint.

В данный момент я использую условную компиляцию, но я бы хотел уйти от этого и использовать механизм DI, чтобы выбрать один из двухклассы, в зависимости от того, нахожусь ли я в SharePoint.

Ответы [ 2 ]

9 голосов
/ 04 июня 2011
bool isSharepoint =
     AppDomain
        .CurrentDomain
        .GetAssemblies()
        .Any(a => new AssemblyName(a.FullName).Name == "Microsoft.SharePoint");

Не проверено, но при этом выполняется проверка загруженных сборок, имя которых было Microsoft.SharePoint.

1 голос
/ 04 июня 2011

Один из способов - проверить параметры командной строки вашего текущего процесса (w3wp.exe) и найти «-ap« SharePoint Content AppPool ». Лично я предпочитаю упомянутый вами метод (ищите Microsoft.SharePoint.сборка dll).

...