asp.net-mvc - 有没有一种方法可以在运行时动态更新asp.net mvc bundle 内容?

标签 asp.net-mvc asp.net-mvc-4 bundling-and-minification web-optimization asp.net-bundling

我的应用程序是ASP.NET MVC v4,并且正在使用Web优化功能(脚本和样式的捆绑和最小化)。

现在,我了解的是(如果错了,请纠正我),优化框架将在编译时查看所包含的文件并对其进行配置。它将根据内容创建一个版本号(v = something)。每次内容更改时,它将重新创建版本哈希,客户端将获取更新的文件。

现在,有没有一种方法可以完成以下任务

[1]更新服务器中js文件中的内容,然后将更新后的内容提供给客户端,而无需重新构建和重新启动应用程序(我这里没有更改包配置,只是更新脚本中的文件内容)?

[2]更新脚本配置本身(例如,将新脚本添加到捆绑包中),然后将其提供给客户端,而无需重新编译和重新启动应用程序?还是至少没有重新编译? (我知道,通常我们在cs文件中定义包,但想知道是否有出路!)

[3]有没有办法使用我自己的版本号(例如,从配置文件v = myCustomScriptVersion中获取),而不是使用自动生成的版本哈希?

最佳答案

有点晚了,但是我只是在这里分享我自己的问题的经验。

正如问题注释中所讨论的,捆绑包被定义为一个cs文件的一部分(通常位于App_Start内部的BundleConfig.cs)。因此,捆绑软件是在编译时定义的,在应用程序启动时,它们将被添加到集合中并变得可用。

现在,有趣的一点。在运行时,优化框架将对包含的文件进行查找,并创建内容的哈希,然后将其作为版本查询字符串附加到捆绑包请求中。因此,当bundle被调用时,生成的uri如下所示。

http://example.com/Bundles/MyBundledScripts?v=ILpm9GTTPShzteCf85dcR4x0msPpku-QRNlggE42QN81

版本号v = ...是完全动态的。如果捆绑软件中的任何文件内容发生更改,则将重新生成该版本,否则将保持不变。

现在回答问题,

[1]这是由框架自动完成的,不需要为此做任何额外的事情。每次更改文件内容时,都会生成新的版本号,并且客户端将获取更新的脚本。

[2]不可能。如果捆绑包中包含的文件已更改,则必须重新编译。

[3]是的,可以使用。自定义版本号可以如下添加。

@Scripts.Render("~/Bundles/MyBundledScripts?v=" + ConfigurationManager.AppSettings["ScriptVersion"])

But Caution! This will remove the automatic versioning based on file contents.



另外,如果同一文件有多个版本可用,并且我们始终希望包含可用的最新版本,则可以通过在捆绑包配置中包含如下的{version}通配符来轻松实现。
bundles.Add(new ScriptBundle("~/Bundles/MyBundledScripts")
            .Include(
                "~/Scripts/Vendor/someScript-{version}.js"
            ));

因此,如果/Scripts/Vendor文件夹中有2个脚本
someScript-2.3.js
someScript-3.4.js

然后,文件someScript-3.4.js(更高版本)将自动包含在内。当将新文件someScript-4.0.js添加到该文件夹​​时,无需重新编译/重新启动即可将其提供给客户端。

关于asp.net-mvc - 有没有一种方法可以在运行时动态更新asp.net mvc bundle 内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27604960/

相关文章:

c# - 由于绑定(bind)重定向,无法加载 DLL

javascript - 0x800a138f - Internet Explorer : JavaScript runtime error: Unable to get property '0' of undefined or null reference

c# - MVC4 通过 Ajax.BeginForm 传递模型

asp.net-mvc - 无法在 cshtml 中加载 ReportViewerForMvc 引用

c# - 防止外部代码修改C#中的私有(private)数据

c# - MVC4 捆绑 : where the URL for bundle is held

asp.net-mvc - 修改后不清除 ASP.NET 包缓存

c# - Fluent Validation,在 Asp.NET Core 中对列表中的每个项目进行不同的验证

c# - VaryByCustom 和模型绑定(bind)

asp.net - bundle 优先于路由吗?