Включите “Режим отладки” в ASP.NET приложение MVC с помощью директив C#

Мои действия в ASP.NET контроллер MVC украшены многочисленными свойствами как это

    [OutputCache(Duration = 86400, Location = OutputCacheLocation.Client,
        VaryByParam = "jsPath;ServerHost")]
    [CompressFilter]
    public JavaScriptResult GetPendingJavaScript(string jsPath, string serverHost)

То, что я хотел бы сделать, должно перенести это во что-то как #if и #endif, и иметь установку DebugMode в моем web.config файле. Когда эта установка имела бы значение true, свойства украшения должны быть игнорированы - я хочу включить режим отладки, и в режиме отладки не должны происходить никакое сжатие и кэширование.

Таким образом, по существу это было бы похоже на комментирование тех, которые украшают свойства (что я на самом деле делаю теперь и устал от него):

    //[OutputCache(Duration = 86400, Location = OutputCacheLocation.Client,
    //    VaryByParam = "jsPath;ServerHost")]
    //[CompressFilter]

Очевидно, #if и #endif работают с определенным (#define) C# символы, я не мог найти пример, где это будет работать с другими типами условия (как значения web.config, и т.д.).

Help ценится

8
задан Brian Tompsett - 汤莱恩 8 July 2016 в 20:15
поделиться

2 ответа

Вместо этого я бы использовал Web Deployment Projects и атрибут configSource в web.config.

Я бы разделил web.config на два файла для каждого компонента. Например, для вашего выходного кэша был бы разбит на outputcache.dev.config и outputcache.live.config. Вы должны ввести источник конфигурации в качестве файла dev-конфигуратора.

Ваш dev.config скажет вашему приложению, что вы не хотите кэшировать запущенный файл (enableOutputCache="false").

Затем, когда вы запускаете проект установки, вы можете настроить замену строк dev.config на live.config.

Подробнее о проектах конфигурирования и Web-развертки.

Что касается вашей проблемы с CompressFilter... Ну, у меня просто есть значение настройки приложения в ваших конфигурационных файлах. После разделения конфигурационных файлов у вас будет appsettings.dev.config, и appsettings.live.config. В вашем dev, у вас было бы что-то вроде:

<add key="InLiveMode" value="false" />

И в live.config, да, вы догадались:

<add key="InLiveMode" value="true" />

Затем, когда вы используете атрибут, вы можете просто против настройки приложения в InLiveMode.

К вашему сведению: Я предпочитаю иметь некий класс facade, так что я не имею дела с волшебными строками в коде, но для простоты у вас будет что-то вроде:

//CompressFilter class
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
  bool inLiveMode = bool.Parse(ConfigurationManager.AppSettings["InLiveMode"]);

  if(inLiveMode)
  {
    //Do the compression shiznit
  }
}
2
ответ дан 6 December 2019 в 01:40
поделиться

Извините, в .NET нет ничего, что могло бы привести к компиляции различных частей вашего кода на основе того, что находится в конфигурационном файле во время выполнения.

0
ответ дан 6 December 2019 в 01:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: