是否可以在ScriptBundle MVC中更改ASP.NET的呈现输出?当使用EnableOptimizations = false配置包时,包中包含的每个脚本的输出如下所示:
<script src="~/Scripts/path/to/script"></script>我想基于ScriptBundle更改这个“模板”(因为所有的包都可以)。有办法改变这种状况吗?
发布于 2018-02-26 16:05:51
看看下面的代码,它总是会给出新的文件。
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”的版本,而不是上次更新的时间。
发布于 2018-02-26 16:08:17
我也与MVC捆绑斗争了很长时间。一开始很棒,但当你需要做任何不寻常的事情(比如你的问题)时,你就开始与它展开一场失败的战斗。
很抱歉,这没有直接回答你的问题,但我搬到WebPack是因为这样的问题,从来没有回头。
https://stackoverflow.com/questions/48991907
复制相似问题