我有一个asp.net MVC4 Web应用程序,它使用样式捆绑主题。我有一个像这样的物理主题文件夹结构......
Themes\
_Base\
Theme1\
Theme2\
...\
每个主题文件夹中都包含任意数量的LESS文件。在我的BundleConfig.RegisterBundles
方法中,我有一些逻辑循环每个主题文件夹并为每个创建一个包。 System.Web.Optimization的捆绑机制将监视现有捆绑包中的文件和文件夹中的更改,并刷新捆绑缓存,这样可以正常工作。
然而,我需要的是将新主题文件夹(即Theme3\
)复制到我的Themes
根文件夹中的方法,以及应用程序识别这些文件夹而无需先重新启动它。我尝试创建一个引用每个文件夹中所有文件的“虚拟”包...
var changeTracking = new StyleBundle(BUNDLE_ROOT);
changeTracking.Transforms.Clear();
changeTracking.IncludeDirectory(THEME_ROOT, "*.less", true);
changeTracking.Transforms.Add(new LessTransform());
changeTracking.Transforms.Add(new CssMinify());
bundles.Add(changeTracking);
......但这似乎没有帮助。当我Theme3\
时,它不会触发对BundleConfig.RegisterBundles
的另一次调用。我仍然需要执行IISRESET,回收应用程序池等,以便识别新主题。
有没有办法在Application_Start发生后动态添加包?
答案 0 :(得分:4)
这不是我们明确试图支持的内容,期望所有捆绑包在应用程序启动之前注册。否则,这将导致webfarm场景中的问题,其中所有服务器上都不存在某些捆绑包,这将导致404.
捆绑缓存依赖关系将负责从ASP.NET缓存中刷新旧响应,但它不会触发对您从global.asax调用的RegisterBundles的另一个调用,并且只会在像您这样的应用程序回收期间调用已经提到了。