7

我有一个使用样式捆绑主题的 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);

...但这似乎没有帮助。当我 makeTheme3\时,它​​不会触发另一个调用BundleConfig.RegisterBundles. 我还是要做一个IISRESET,回收应用程序池等等,才能让新的主题被识别。

有什么方法可以在 Application_Start 发生后动态添加捆绑包?

4

1 回答 1

4

这不是我们明确试图支持的东西,期望是所有捆绑包都在应用程序启动之前注册。否则,这将在 webfarm 场景中导致问题,其中某些捆绑包不存在于所有服务器上,这将导致 404。

捆绑缓存依赖项将负责从 ASP.NET 缓存中刷新旧响应,但它不会触发对 RegisterBundles 的另一个调用,该调用是从您的 global.asax 调用的,并且只会在您提到的应用程序回收期间调用.

于 2013-03-11T04:02:16.487 回答