我正在尝试使用
缩小和捆绑我的 css 和 js 文件
我能找到的所有示例都包含母版页/_layout 文件中的所有脚本。
我希望能够拥有一个
@RenderSection("Script", false)
在我的 _layout 文件中,像这样从我的“ subview ”添加脚本
@section Script {
<script src="@Url.Content("~/Scripts/Configuration/Configuration.js")" type="text/javascript"></script>
}
现在我的问题是如何将文件动态添加到包中并强制清除缓存?
现在我有这个
public static void AddBundleFile(this HtmlHelper helper, string path, Type type, int index)
{
var bundle = BundleTable.Bundles.GetRegisteredBundles()
.Where(b => b.TransformType == type)
.First();
bundle.AddFile(path);
}
从我的“ subview ”添加文件,但捆绑文件永远不会更新..
最佳答案
我不是 100% 确定您的哪个部分有问题。听起来您想动态地包含 bundle ?我真的会尽量避免使用任何动态获取 JS 然后以任何特定顺序合并/组合它的机制。
迟早,您将需要精细控制以何种顺序包含哪些 JS。您越早解决这个问题,您的应用就越有前途。令人沮丧的是,他们甚至构建了自动将所有脚本捆绑在一个文件夹中的能力,这是一个糟糕的主意。
因此,您只剩下必须指定 javascript 文件和包的包含顺序这一极其轻微的烦恼。我们通过维护一个简单的 List<string>
来做到这一点在应用程序启动时消耗。
现在我认为对于我们的使用来说,我们可以只为网站提供一个大的 bundle ,但我可以看到设置指定 bundle 的功能,然后还指定 bundle 的包含顺序。最后你会得到一个List<T>
。复习。
这是我们的部分脚本的样子,它让我们可以在使用 bundle 或使用单独包含的 javascript 文件之间动态切换:
@if (NameSpace.UI.UseBundledResources) // set in the web.config, different per environment
{
<script src="@Url.ContentNoCache("~/bundle.js")" type="text/javascript"></script>
}
else
{
foreach (var file in NameSpace.UI.JavaScriptFileNames)
{
<script src="@Url.ContentNoCache(file)" type="text/javascript"></script>
}
}
然后我们的应用启动
var customJsFiles = NameSpace.UI.JavaScriptFileNames;
var myJSBundle = new Bundle("~/bundle.js", typeof(JsMinify));
customJsFiles.ForEach(f => myJSBundle.AddFile(f));
BundleTable.Bundles.Add(myJSBundle);
关于c# - 使用 Microsoft Web Optimization 缩小 CSS 和 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9685662/