Совместно использование файлов ресурса asp.net между веб-приложениями

У меня есть несколько проектов, которые должны совместно использовать файлы ресурса (.resx), Предложения были сделаны переместиться, файлы ресурса к отдельному собранию и иметь веб-проекты ссылаются на него. Есть ли пример того, как сделать это?

Я создаю новый проект Библиотеки классов и перемещаю папку App_GlobalResource в этом? Я не думаю, что это будет работать, потому что кодовые классы, которые произведены для файлов ресурса, отмечены как 'внутренние', что означает, что к ним нельзя получить доступ за пределами этого собрания.

11
задан dev.e.loper 26 January 2010 в 16:07
поделиться

1 ответ

В окне свойств Visual Studio вы должны иметь возможность установить для модификатора доступа файла ресурсов значение public. Однако вы не сможете получить доступ к ресурсам в файлах aspx с помощью обычного синтаксиса <% $ Resources: ...%> , поскольку он не поддерживает ресурсы в ссылочных сборках. У меня была та же проблема, и я решил ее, реализовав собственный ExpressionBuilder, но в настоящий момент у меня нет доступа к исходному коду. Если он все еще нужен, я могу посмотреть код сегодня вечером.


РЕДАКТИРОВАТЬ: Хорошо, вот как я решил эту проблему:

Шаг 1 : Переместите файлы resx в библиотеку классов. Они не обязательно должны находиться в определенной папке. В визуальном конструкторе файла resx установите для параметра «Модификатор доступа» (верхний правый угол) значение «Public»

Теперь вы должны иметь возможность

  • ссылаться на ресурсы в коде C # / VB (в библиотеке, а также в веб-проекте), например, Dim myMessage As String = [Namespace.] Resources.NameOfResx.NameOfResource

  • ссылаются на ресурс как на встроенный код на страницах aspx, например,

    <% = [Namespace.] Resources.NameOfResx.MyTitle%>

    .

Что не будет на данном этапе работать, так это использовать выражение ресурсов, например, .К сожалению, вы не можете просто заменить это встроенным кодом, поскольку он находится внутри свойства элемента управления на стороне сервера.

Шаг 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, вы можете посмотреть там примеры кода.

21
ответ дан 3 December 2019 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: