asp.net - 如何在 Application_Start 发生后动态添加 bundle ?

标签 asp.net asp.net-mvc-4 bundling-and-minification asp.net-optimization

我有一个 asp.net MVC4 Web 应用程序,它使用主题样式捆绑。我有一个像这样的物理主题文件夹结构......

 Themes\
     _Base\
     Theme1\
     Theme2\
     ...\

每个主题文件夹中都有任意数量的 LESS 文件。在我的 BundleConfig.RegisterBundles 方法中,我有一些逻辑循环遍历每个主题文件夹并为每个主题创建一个包。 System.Web.Optimization 的捆绑机制将监视现有 bundle 中的文件和文件夹中的更改,并刷新 bundle 缓存,这工作正常。

但是,我需要的是一种将新主题文件夹(即 Theme3\)复制到我的 Themes 根文件夹中的方法,并且应用程序可以识别这些文件夹无需先重新启动它。我尝试创建一个“虚拟” bundle ,引用每个文件夹中的所有文件...

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 发生后动态添加 bundle 吗?

最佳答案

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

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

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

相关文章:

c# - MVC4 捆绑误导背景图像 url

visual-studio - Visual Studio 2015 缩小 "access to path bundleconfig.json denied"

c# - StreamWriter 在写入文本文件时截断文本

Asp.net core razor View 未格式化

javascript - MVC4/JS/AJAX : Html. 原始输出替换 HTML View 中 href 标签中的内容

c# - 无法加载文件或程序集...System.Data.Entity.dll

c# - 设置到区域的路由,而无需在 MVC 中的 url 中指定区域名称

asp.net - 将复选框组存储在@Html.HiddenFor中

javascript - 将变量传递给函数时出错 javascript 不允许更改 CSS

css - 更新 OS X 上 ASP.NET Core 中的缩小 CSS