Я сделал, чтобы библиотека кодировала, который должен знать, выполняется ли она в контексте веб-сервера или автономного сервера приложений.
Очевидное это приходит на ум, должно проверить название файла конфигурации приложения и если это - web.config - затем это - веб-сервер, иначе - автономный сервер приложений.
Иначе должен искать что-то как "Временные файлы ASP.NET" в пути теневой папки.
Но мне не нравятся оба из них, так как они кажутся также hacky и хрупкий. Существует ли устойчивый способ сделать то, что я хочу?
Спасибо.
P.S.
Можно определить специализированную установку конфигурации приложения - IsWebServer, но мне не нравится он еще больше.
Править:
При поиске решения другой проблемы я думаю, что решил этого - детали здесь
пытается решить другую Проблема, я нашел хорошее решение для этого.
Существует личный метод System.configuration.settingsPropertyvalue.ishostedinaspnet
, который имеет именно то, что мне нужно. Будучи частным методом, я не хочу называть это (хотя я мог бы использовать отражение), но его реализация тривиальна:
private bool IsHostedInAspnet()
{
return (AppDomain.CurrentDomain.GetData(".appDomain") != null);
}
(в соответствии с отражателем)
выглядит как специальный ключ в данных домена приложений - «.Appdomain», который устанавливается при запуске в веб-сервере ASP.NET.
Я буду придерживаться этого.
Лучший вариант - это настройка конфигурации.
Это лучше для реализации; Это лучше, потому что это очевидное утверждение о том, как код будет работать, и лучше, потому что он не полагается на детали реализации; Вы в частности, филиал от значения, который вы установили. Может быть, решение, которое вы делаете, не очевиден, и ваша переменная / конфиг может быть наводящим в зависимости от рассуждения.
Это вариант, на которую я бы пошел.
Можно проверить
HttpContext.Current
Если он не нулевой, то он запускается из веб-приложения.
Вы можете узнать текущее имя процесса:
Process p = Process.GetCurrentProcess();
string assemblyName = p.ProcessName;
и затем проверить, является ли это имя процесса ASP.NET
получает значение, которое указывает, является ли текущая презентация Windows Приложение Foundation (WPF) Хостер браузера.
Это как его сделано в XBAP
Или если у вас есть appdomain, размышляя и получите что-нибудь от этого? Использование
Я думаю, что самое лучшее, что нужно сделать, это разбить библиотеку на 2 DLL, которые по-настоящему общему и один ( Тот, который требует ASP.NET), который загружается только на сайте. Проверка, если он в настоящее время работает в ASP.NET, чувствует себя немного взлома.
Очень зависит от ситуации, или нет, вы можете легко сделать это.