c# – Web.Optimizations – 从风格/脚本包中获取所有内容的任何方式?

我正在使用一些基于配置的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属性的预期安全性,但它的工作正常.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...