В окне свойств Visual Studio вы должны установить публичный модификатор доступа к файлу ресурса. Однако вы не сможете получить доступ к ресурсам в файлах aspx, используя обычный синтаксис <%$ Resources:... %>
, поскольку он не поддерживает ресурсы в ссылочных сборках. У меня была та же проблема, и я решил ее, реализовав пользовательский ExpressionBuilder, но в данный момент у меня нет доступа к исходному коду. Если это все еще нужно, я могу посмотреть код сегодня вечером.
РЕДАКТИРОВАТЬ: ОК, вот как я решил эту проблему:
Шаг 1 : переместить файлы resx в библиотеку классов. Они не должны быть в определенной папке. В визуальном конструкторе файла resx установите «Модификатор доступа» (в верхнем правом углу) на «Public»
Теперь вы должны быть в состоянии
ссылки на ресурсы в C # / VB код (в библиотеке и в веб-проекте), например, Dim myMessage As String = [Namespace.]Resources.NameOfResx.NameOfResource
ссылаться на ресурс как встроенный код на страницах aspx, например, <h1><%= [Namespace.]Resources.NameOfResx.MyTitle %></h1>
.
То, что не будет работать на данном этапе, это использовать выражение ресурсов, например, <asp:Button runat="server" Text="<%$ Resources:NameOfResx,MyButtonText %>" />
. К сожалению, вы не можете просто заменить это встроенным кодом, так как он находится внутри свойства серверного элемента управления.
Шаг 2 : Давайте создадим в нашей библиотеке пользовательский ExpressionBuilder, который интерпретирует выражения произвольного кода. К счастью, мы можем позволить мощным классам .net Framework сделать всю работу за нас:
Imports System.Web.Compilation
Imports System.Resources
Imports System.CodeDom
<ExpressionPrefix("Code")> _
Public Class CodeExpressionBuilder
Inherits ExpressionBuilder
Public Overrides Function GetCodeExpression(ByVal entry As System.Web.UI.BoundPropertyEntry, ByVal parsedData As Object, ByVal context As System.Web.Compilation.ExpressionBuilderContext) As System.CodeDom.CodeExpression
Return New CodeSnippetExpression(entry.Expression)
End Function
End Class
Затем нам нужно зарегистрировать этот ExpressionBuilder в web.config:
<system.web>
...
<compilation ...>
<expressionBuilders>
<add expressionPrefix="Code" type="NamespaceOfYourLibrary.CodeExpressionBuilder" />
</expressionBuilders>
</compilation>
</system.web>
Теперь вы должны быть в состоянии сделать следующее:
<asp:Button runat="server" Text="<%$ Code:[Namespace.]Resources.NameOfResx.MyButtonText %>" />
Кредит: я получил идею CodeExpressionBuilder из блога Infinites Loop . Если вы больше разбираетесь в C #, чем в VB, вы можете взглянуть на примеры кода там.