Sharepoint JS文件未在站点资产中更新

Sharepoint JS文件未在站点资产中更新,sharepoint,sharepoint-2013,Sharepoint,Sharepoint 2013,好吧,我以前从未见过这样的事情,希望其他人也见过。我刚刚将我们的开发和测试服务器修补到Nov2017CU(SharePoint 2013)。从那时起,任何使用来自站点资产的JS注入的解决方案都不会更新。我将对该文件进行更改,库反映了我所做的更改,但当我尝试加载访问js文件的页面时,这些更改不会反映出来。硬刷新和完全缓存清理不会影响它。如果我关闭并重新打开我的编辑器(VSCode),我的更改将消失。当我查看版本历史记录时,当前版本没有我所做的更改,但以前的版本有。如果我尝试还原到该版本,则不会花费

好吧,我以前从未见过这样的事情,希望其他人也见过。我刚刚将我们的开发和测试服务器修补到Nov2017CU(SharePoint 2013)。从那时起,任何使用来自站点资产的JS注入的解决方案都不会更新。我将对该文件进行更改,库反映了我所做的更改,但当我尝试加载访问js文件的页面时,这些更改不会反映出来。硬刷新和完全缓存清理不会影响它。如果我关闭并重新打开我的编辑器(VSCode),我的更改将消失。当我查看版本历史记录时,当前版本没有我所做的更改,但以前的版本有。如果我尝试还原到该版本,则不会花费时间(仍然显示文件的先前版本)

这就是它变得特别奇怪的地方。我已从库中删除了整个文件。重置IIS(见鬼,我甚至一次重新启动了服务器)。它仍然以某种方式加载文件。该文件不再在库中,但服务器仍在向浏览器提供该文件。我已经确认它不是从另一个位置获取的,因为开发工具显示该文件位于删除该文件的资产库中。即使是以前从未访问过该网站的用户,也会在浏览器中获取该文件

这也不局限于单个站点。我有其他开发人员在不同的子网站(相同的网站集)有相同的问题。
有人见过这个吗

看起来您的web应用程序已启用BLOB缓存,这导致文件从缓存中提供服务

有两种修复方法:

1) 惯用的方法是使用上面提到的powershell命令刷新BLOB缓存:

$webApp = Get-SPWebApplication "<WebApplicationURL>" 
[Microsoft.SharePoint.Publishing.PublishingCache]::FlushBlob‌​Cache($webApp) 
$webApp=获取SPWebApplication“”
[Microsoft.SharePoint.Publishing.PublishingCache]::FlushBlob‌​缓存($webApp)
这将刷新BLOB中的所有文件。通常,根据
max age
属性值缓存文件。因此,这就是为什么即使您从源代码中删除了您的文件,您的文件也会被送达的原因


2) 外科手术刀的方法是附加一个查询字符串,如(
https://sitecollurl/siteassets/app.js?v=1.1
),指向文件引用(通常在母版页、页面布局、Web部件引用、脚本链接等引用位置)。将查询字符串附加到文件时,将强制浏览器下载文件的较新版本。您更喜欢这种方法,因为它不会不必要地从BLOB中清除其他文件。

您可以将查询字符串附加到js文件并进行检查吗?但该文件甚至不再存在,仍在加载中。不确定这会做什么。查询字符串的作用类似于缓存爆破机制。删除注入的脚本并使用查询字符串(如
https://sitecollurl/siteassets/abcd.js?v=1.1
然后再试一次。此外,如果启用了BLOB缓存,则可以使用powershell刷新它,如
$webApp=Get-SPWebApplication”“[Microsoft.SharePoint.Publishing.PublishingCache]::FlushBlobCache($webApp)
使用查询字符串时,它将强制浏览器下载该文件的较新版本。这是一种标准做法。每当我们使用更新文件时,我们通常会更改查询字符串,以便最终用户不必进行硬刷新。在我们的例子中,我们主要引用母版页中的文件或使用脚本链接,因此在每次更新之后,我们都会附加一个查询字符串来执行缓存突发。但是,这是否可以避免blob缓存?SharePoint是否会提供其认为包含在blob缓存中的最新版本?我只是想让您知道,我在这方面做了一个快速阻止,但在内部为您提供了关于此答案的帮助。非常感谢您的呼喊:)在我对SharePoint online的测试中,它很有效。这背后的逻辑是,无论何时更改查询字符串,浏览器都会认为新文件可用,因此会下载此文件