我正在使用一些基于配置添加 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/