WestWind.Globalization中出现意外行为 - 阻止更新

时间:2014-08-04 14:32:18

标签: c# asp.net localization westwind westwind-globalization

正如标题所示,我使用WestWind.globalisation作为数据库资源提供者来支持多种语言。

问题是,资源提供者自己似乎不愿意反映我在应用程序中所做的更改。

一个例子:

我有一个元素:

<asp:Image runat="server" ID="img_placeholder" ImageUrl="~/images/BigPicture.jpg" />

我已将以下数据插入到我的本地化表中:

pk  ResourceId              Value                          LocaleId  ResourceSet
--------------------------------------------------------------------------------
391 ImgBigPicture.ImageUrl  ~/images/BigPicture-en-US.jpg   en-US    Site.master
392 ImgBigPicture.ImageUrl  ~/images/BigPicture.jpg              Site.master
393 ImgBigPicture.ImageUrl  ~/images/BigPicture-fr-FR.jpg   fr-FR    Site.master

在此之后我将标记更改为:

<asp:Image runat="server" ID="img_placeholder" ImageUrl="~/images/BigPicture.jpg" meta:resourceKey="ImgBigPicture"/>

当我刷新应用程序或重建它时,更改不会显示在浏览器中。图片网址保持不变。在任何给定元素都可以观察到相同的结果,无论是asp:Label还是asp:Button

有时重新启动IIS就足够了;有时它足以重新启动Visual Studio和Chrome以使更改正常工作。大多数情况下,我需要重新启动服务器,以便以当前和实际状态显示所有内容。当它发生时,我可以切换我的UIculture,并相应地更改属性。

我不知道发生了什么,踩过代码并没有向我透露任何内容。

我愿意接受有关如何应对这一问题的任何建议和解决方案。

1 个答案:

答案 0 :(得分:0)

资源集在.NET中的工作方式,它们只加载一次然后缓存在内存中。这意味着当第一次加载资源时,ASP.NET首次请求ResourceSet,然后再重新启动AppDomain。因此,您对数据库资源所做的任何更改都不会立即反映出来。

在管理表单上有一个允许您卸载DbResources的选项。 dbResourceProvider支持使用此机制卸载资源,以强制在下次访问时重新加载。因此,除非您这样做,否则资源不会重新加载。

IIS重新启动,应用程序池回收甚至web.config更改(导致AppDomain关闭并重新启动的任何内容)也将清除资源并重新开始。

如果您仍然看到相同的资源,那么您可能正在处理浏览器缓存。 Chrome浏览器缓存非常具有侵略性,如果将显式加载到窗口并进行硬刷新(Shift-f5),图像通常只会重新加载。如果您在Chrome中进行测试并且想要查看新图像,请使用开发人员工具清除浏览器缓存选项来完全清除缓存(或右键单击“刷新”按钮并选择“清除缓存并重新加载”)。