我有一个使用样式捆绑主题的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发生后动态添加捆绑包?

最佳答案

这不是我们明确想要支持的东西,期望所有捆绑软件都在应用启动之前被注册。否则,这将在Webfarm方案中引起问题,在Webfarm方案中,所有服务器上都不存在某些捆绑软件,这将导致404错误。

捆绑包缓存依赖项将处理从ASP.NET缓存中清除旧响应的情况,但不会触发对RegisterBundles的另一次调用,即从您的global.asax中调用,并且仅在应用程序循环期间如您提到的那样调用。

关于asp.net - Application_Start发生后如何动态添加捆绑包?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15328040/

10-13 03:03