【问题标题】:IIS still load old javascript file. How to update or tell iis to load/take new javascript files?IIS 仍然加载旧的 javascript 文件。如何更新或告诉 iis 加载/获取新的 javascript 文件?
【发布时间】:2021-06-14 09:51:22
【问题描述】:

我在服务器上部署了一个新的更新(MVC 5 应用程序)。虽然 iis 会加载我在视图、css 等中的所有更改。它不会加载 javascript 文件中的更改。它仍然加载旧版本的 javascript 文件。

physical file in folder is different than iis loaded file

我尝试了以下方法,但没有任何改变:

  • 重新启动 IIS。
  • 使用 iisreset 命令重置 ISS
  • 删除网站并重新发布

我试图复制其中一个 js 文件并将其重命名。它可以工作,因为 iis 将其视为一个新文件。但这不是解决方案。这个问题还有其他解决方案吗?

【问题讨论】:

标签: javascript asp.net-mvc iis model-view-controller deployment


【解决方案1】:

如果您使用无法访问的主机来修改 IIS 设置。您可以将文件版本放在像<script src='js/script.js?ver=1.1'></script> 这样的脚本标记之后,以强制iis 在页面加载时获取新文件。当您编辑内容时,请更改该版本。

我实现了一个用于我的项目的自定义 js/css 包,内容版本基于 webapp 版本。运行新构建时,所有 js 和 css 都会刷新:

using System;
using System.IO;
using System.Reflection;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;

namespace WebUtilities
{
    public static class CustomWebUtility
    {
        public static IHtmlString ScriptsRender(string bundlePath)
        {
            var contentVersion = GetWebappVersion();
            return Scripts.RenderFormat("<script type=\"text/javascript\" src=\"{0}?ver=" + contentVersion + "\"></script>", bundlePath);
        }
        public static IHtmlString StylesRender(string bundlePath)
        {
            var contentVersion = GetWebappVersion();
            return Styles.RenderFormat("<link href=\"{0}?ver=" + contentVersion + "\" rel=\"stylesheet\">", bundlePath);
        }

        /// <summary>
        /// Get web app version
        /// </summary>
        /// <returns>Webapp version with format: {major}.{minor}.{revision}</returns>
        public static string GetWebappVersion()
        {
            var version = string.Empty;
            Version assemblyVersion = Assembly.GetExecutingAssembly().GetName().Version;
            version = String.Format("{0}.{1}.{2}", assemblyVersion.Major, assemblyVersion.Minor, assemblyVersion.Revision);

            return version;
        }
    }
}

BundleConfig.cs

// js
bundles.Add(new ScriptBundle("~/bundles/js").Include(
    "~/Scripts/pages/base.js",
    "~/Scripts/pages/somescript.js"));
// css
bundles.Add(new StyleBundle("~/Content/css").Include(
   "~/Content/css/base.css",
   "~/Content/css/base-mobile.css"));

像普通的 ScriptBundle 和 StyleBundle 一样使用它:

<head>
    @CustomWebUtility.ScriptsRender("~/bundles/js")
    @CustomWebUtility.StylesRender("~/Content/css")
</head>

结果:

<script type="text/javascript" src="/Scripts/pages/base.js?ver=1.2.21503"></script>
<link href="/Content/css/base.css?ver=1.2.21503" rel="stylesheet">

【讨论】:

    【解决方案2】:

    在我的网站压缩设置上禁用动态和静态内容压缩设置为我解决了这个问题。

    IIS website Compression setting

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多