Asp.net mvc ASP.NET MVC脚本包:更改呈现的输出

Asp.net mvc ASP.NET MVC脚本包:更改呈现的输出,asp.net-mvc,Asp.net Mvc,是否可以在ASP.NET MVC中更改ScriptBundle的呈现输出?使用EnableOptimizations=false配置捆绑包时,捆绑包中包含的每个脚本的输出如下所示: <script src="~/Scripts/path/to/script"></script> 我想根据ScriptBundle更改此“模板”(对于所有捆绑包也可以)。有什么方法可以改变这一点吗?看看下面的代码,它将始终提供新的文件 using System.IO; using Sy

是否可以在ASP.NET MVC中更改ScriptBundle的呈现输出?使用
EnableOptimizations=false
配置捆绑包时,捆绑包中包含的每个脚本的输出如下所示:

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


我想根据ScriptBundle更改此“模板”(对于所有捆绑包也可以)。有什么方法可以改变这一点吗?

看看下面的代码,它将始终提供新的文件

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”的版本,而不是上次更新的时间。

我也与MVC捆绑做了很长时间的斗争。一开始这很好,但当你需要做任何不寻常的事情(比如你的问题)时,你开始与它打一场失败的战争

很抱歉,这并不能直接回答您的问题,但由于类似的问题,我转到了WebPack,并且从未回头


将其更改为什么?为什么?它生成的内容有什么问题?需要添加版本查询参数。目前无法捆绑和缩小脚本,现在也不能选择重写脚本。但我们仍然希望在更改应用程序版本时使用新文件。这与缓存有关吗?否则,查询参数将实现什么?这些链接指向生成输出的静态文件还是服务器端脚本?不清楚。为什么你不能捆绑和缩小?我不确定您是否可以通过Scripts.Render helper执行所需操作,它似乎不接受任何其他参数。因此,您可以制作自己的助手,也可以直接编写
,我将每个脚本都包含在这个脚本包的特定子目录中(AngularJS脚本无法缩小为特定的;因此
EnableOptimizations
被禁用)“AngularJS脚本无法缩小”为什么不能?从理论上讲,任何JS都是小型的,我们也希望朝着WebPack的方向发展,但现在这不是一个优先事项,所以我们必须坚持使用MVC捆绑包。我最初认为它是非常可扩展的,但它似乎只允许您对脚本进行一些排序,基本上就是这样。这是可以理解的-通常我会保持沉默,但我只是想给您一些重新保证,移动到类似WebPack的东西肯定是一个很好的最终目标。祝你好运:)虽然这不是直接回答问题,但这是问题的解决办法。@Eddi:当Mike发表评论并将帖子标记为“不是答案”时,看起来完全不同,实际上没有答案。兰吉特编辑了他的文章,编辑后才成为答案。单击答案下方的“编辑”链接查看其原始版本,然后您就明白了Mike M的意思。@jps我以前确实看到过答案,但事实上我指的是他编辑的答案,它实际上没有回答如何按照我的要求更改渲染输出。但他给出的答案仍然是我所面临的根本问题的解决方案:)