c# - Web.Optimizations - 有什么方法可以从 Style/Script Bundle 中获取所有内容?

标签 c# asp.net asp.net-mvc bundling-and-minification asp.net-optimization

我正在使用一些基于配置添加 CSS 和 JS 文件的动态捆绑。

我启动了一个新的 StyleBundle,这样:

var cssBundle = new StyleBundle("~/bundle/css");

然后遍历配置并添加任何找到的包括:

cssBundle.Include(config.Source);

在循环之后,我想检查是否确实包含任何文件/目录。我知道有 EnumerateFiles(),但我不认为这 100% 能达到目的。

以前有其他人做过类似的事情吗?

最佳答案

Bundle类使用未向应用程序公开的内部项目列表,并且不一定可以通过反射访问(我尝试过但无法获取任何内容)。您可以使用 BundleResolver 获取有关此的一些信息像这样上课:

var cssBundle = new StyleBundle("~/bundle/css");
cssBundle.Include(config.Source);

// if your bundle is already in BundleTable.Bundles list, use that.  Otherwise...
var collection = new BundleCollection();
collection.Add(cssBundle)

// get bundle contents
var resolver = new BundleResolver(collection);
List<string> cont = resolver.GetBundleContents("~/bundle/css").ToList();

如果您只需要计数,那么:

int count = resolver.GetBundleContents("~/bundle/css").Count();

编辑:使用反射

显然我之前的反射测试有问题。

这确实有效:

using System.Reflection;
using System.Web.Optimization;

...

int count = ((ItemRegistry)typeof(Bundle).GetProperty("Items", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(cssBundle, null)).Count;

当然,您可能应该在那里添加一些安全检查,并且像许多反射示例一样,这违反了 Items 的预期安全性。属性,但它确实有效。

关于c# - Web.Optimizations - 有什么方法可以从 Style/Script Bundle 中获取所有内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14888283/

相关文章:

c# - .NET 3.5 和 .NET 4.0 之间的排序差异

asp.net - 包含和寻址 javascript 文件有什么不同

asp.net - 如何在 RDLC 2010 报告的每个页面的相同位置显示相同的图像

asp.net-mvc - 在 mvc 5 项目中安装 ninject mvc 3 后出现的问题

asp.net-mvc - 如何在验证摘要中显示 MVC 3 客户端验证结果

JavaScript 数组到 MVC Controller

c# - 带 2 个小数点的字符串的平均值

c# - 并非所有代码路径都会在 Web 方法上返回值错误

c# - 如何使用 protoBuf 进行结构序列化

css - Webpack 无法识别 css 加载器