我有一个ASP.NET网站项目,需要访问驻留在外部程序集中的资源。为此,我基于一些示例在我的网站代码中创建了一个表达式构建器类
Public Class GlobalizationStringExpressionBuilder
Inherits ExpressionBuilder
Public Sub New()
End Sub
Public Overloads Overrides Function GetCodeExpression(ByVal entry As BoundPropertyEntry, ByVal parsedData As Object, ByVal context As ExpressionBuilderContext) As CodeExpression
Return New CodePropertyReferenceExpression(New CodeTypeReferenceExpression(GetType(Trackem.Globalization.My.Resources.Resources)), entry.Expression.Trim)
End Function
End Class
Trackem.Globalization.My.Resources.Resources是外部资源程序集的名称
在我已添加的网页配置中
<expressionBuilders>
<add
expressionPrefix="GlobalizationString"
type="GlobalizationStringExpressionBuilder" />
</expressionBuilders>
并且在每个控件中我都放了
<asp:Literal ID="Literal1" runat="server" Text="<%$ GlobalizationString:LABEL_FIRSTNAME %>" Mode="Encode"></asp:Literal>
我也重写了InitializeCulture页面事件并设置了线程属性
Protected Overrides Sub InitializeCulture()
Dim up As UserPreferences = UserPreferences()
Dim lcid As Int32 = If(up IsNot Nothing AndAlso up.UILanguage <> 0, up.UILanguage, 1033) 'default to English if no setting found
Dim ci As CultureInfo = CultureInfo.GetCultureInfo(lcid)
Thread.CurrentThread.CurrentCulture = ci
Thread.CurrentThread.CurrentUICulture = ci
MyBase.InitializeCulture()
End Sub
这一切都适用于很多生产服务器,每个用户都可以用自己喜欢的语言查看网站。
在一些Windows 2008R2计算机上,每隔几天发生一些事情(不确定是什么)以及资源管理器混淆服务希伯来语资源,尽管页面应该是英文(我已经放了当前线程文化的response.write和页面确信它在engligh 1033中,但输出的资源是希伯来文)。发生这种情况时,简单的IIS池回收可以解决问题
我错过了什么吗?正如我所说,我不确定是什么触发了这个,但是一个简单的池回收,一切都恢复正常了几天