是否可以在ASP.NET MVC中更改ScriptBundle的渲染输出?使用EnableOptimizations = false
配置捆绑包时,捆绑包中包含的每个脚本的输出都是这样的:
<script src="~/Scripts/path/to/script"></script>
我想改变这个&#34;模板&#34;基于ScriptBundle(对于所有捆绑也可以)。有没有办法改变这个?
答案 0 :(得分:1)
看看下面的代码,它总是会提供新文件。
using System.IO;
using System.Web;
using System.Web.Hosting;
using System.Web.Optimization;
namespace TestProj
{
public class BundleConfig
{
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/common").Include("~/Scripts/CommonScripts.js").WithLastModifiedToken());
BundleTable.EnableOptimizations = false;
}
}
internal static class BundleExtensions
{
public static Bundle WithLastModifiedToken(this Bundle sb)
{
sb.Transforms.Add(new LastModifiedBundleTransform());
return sb;
}
public class LastModifiedBundleTransform : IBundleTransform
{
public void Process(BundleContext context, BundleResponse response)
{
foreach (var file in response.Files)
{
var lastWrite = File.GetLastWriteTime(HostingEnvironment.MapPath(file.IncludedVirtualPath)).Ticks.ToString();
file.IncludedVirtualPath = string.Concat(file.IncludedVirtualPath, "?v=", lastWrite);
}
}
}
}
}
输出
"/Scripts/CommonScripts.js?v=636180193140000000"
这里我将文件的最后修改日期添加为查询参数。因此,每当文件更改时,浏览器将始终获取新文件。或者,您可以在查询参数中添加类似“1.0.0”的版本,而不是上次更新的时间。
答案 1 :(得分:0)
我也在与MVC捆绑打了很长时间。这开始很棒,但是当你需要做任何与众不同的事情时(例如你的问题),你就开始与它展开一场失败的战斗。
对不起,这并没有直接回答你的问题,但由于这类问题,我搬到了WebPack,从未回头。