正如标题所暗示的那样,我使用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"/>当我刷新或重新生成应用程序时,浏览器中不显示更改。图片url保持不变。在任何给定的元素上都可以观察到相同的情况,无论是asp:Label还是asp:Button。
有时重新启动IIS就足够了;有时重新启动Visual Studio和Chrome就足以使更改生效。大多数情况下,我需要重新启动服务器,以便所有内容都以其当前和实际状态显示。当它发生时,我可以切换我的UIculture,属性也会相应地改变。
我不知道发生了什么,单步执行代码并没有向我揭示任何东西。
我对如何处理这个问题的任何建议和解决方案都持开放态度。
发布于 2015-03-16 17:03:49
按照资源集在.NET中的工作方式,它们只加载一次,然后缓存到内存中。这意味着当ASP.NET第一次请求ResourceSet时,将加载资源,然后在AppDomain重新启动之前再也不加载资源。因此,您对db Resources所做的任何更改都不会立即反映出来。
在管理表单上有一个选项,允许您卸载DbResources。dbResourceProvider支持使用此机制卸载资源,以便在下一次访问时强制重新加载。因此,除非您这样做,否则资源将不会重新加载。
IIS重启、应用程序池回收或甚至web.config更改(任何导致AppDomain关闭和重启的更改)也将清除资源并重新开始。
如果您仍然看到相同的资源,那么您可能正在处理浏览器缓存。Chrome在浏览器缓存方面尤其激进,图像通常只有在显式加载到窗口中并进行硬刷新(Shift-f5)时才会重新加载。如果你在Chrome中测试,你想看到新的图像,使用开发者工具清除浏览器缓存选项来完全清除你的缓存(或者右键点击刷新按钮,然后选择清除缓存并重新加载)。
https://stackoverflow.com/questions/25121125
复制相似问题