Мои действия в 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 ценится
Вместо этого я бы использовал 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
}
}
Извините, в .NET нет ничего, что могло бы привести к компиляции различных частей вашего кода на основе того, что находится в конфигурационном файле во время выполнения.