ASP.NET MVC ScriptBundle:更改渲染输出

时间:2018-02-26 15:34:35

标签: asp.net-mvc

是否可以在ASP.NET MVC中更改ScriptBundle的渲染输出?使用EnableOptimizations = false配置捆绑包时,捆绑包中包含的每个脚本的输出都是这样的:

 <script src="~/Scripts/path/to/script"></script>

我想改变这个&#34;模板&#34;基于ScriptBundle(对于所有捆绑也可以)。有没有办法改变这个?

2 个答案:

答案 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,从未回头。

https://webpack.js.org