Есть ли директива для обнаружения ASP.NET? - PullRequest
4 голосов
/ 15 августа 2011

У меня есть библиотека кода, которая работает в ASP.NET, SQL CLR и автономных приложениях и предоставляет различные функции в зависимости от того, доступны определенные пространства имен (например, System.Drawing) или нет. Прямо сейчас я исключаю эти фрагменты кода вручную, но было бы полезно иметь для этого компилятор C #:

  • Я мог бы быть ленивее,
  • Я мог бы использовать одну и ту же библиотеку.

Я знаю, что могу использовать #if директивы для поиска определений, и я мог бы вручную определить что-то вроде ASP_NET, но если есть способ сделать это автоматически, это было бы еще лучше .

Итак, я могу обнаружить ASP.NET? Или я могу определить, доступны ли определенные ссылочные сборки?

Ответы [ 2 ]

9 голосов
/ 15 августа 2011

Нет такой предопределенной директивы препроцессора для asp.net.

Что делает большинство людей, так это ищет текущий HttpContext - предполагается, что, если он нулевой, это не веб-контекст.

Другой альтернативой является проверка HttpRuntime.AppDomainAppId на нулевое значение, аналогичное предположению.

Другие похожие опции:

System.Web.Hosting.HostingEnvironment.IsHosted == true
System.Web.HttpRuntime.Cache != null

И вы можете проверить, существует ли файл web.config.

0 голосов
/ 09 июля 2016

Если вам нужно сделать это во время компиляции (как вы сказали), вы можете определить символ препроцессора самостоятельно.

Предварительная обработка - это концепция C #-only.Вам нужно скомпилировать один раз для каждой цели, которую вы хотите запустить.Препроцессор не может использоваться для всего, что происходит во время выполнения.Его результат записывается в двоичный файл.

...