gpt4 book ai didi

asp.net - 在 Web 应用程序之间共享 asp.net 资源文件

转载 作者:行者123 更新时间:2023-12-04 01:30:03 25 4
gpt4 key购买 nike

我有多个项目需要共享资源文件 (.resx) 建议将资源文件移动到单独的程序集并让 Web 项目引用它。有没有如何做到这一点的例子?

我是否创建一个新的类库项目并将 App_GlobalResource 文件夹移动到其中?我认为这不会起作用,因为为资源文件生成的代码类被标记为“内部”,这意味着它们不能在此程序集之外访问。

最佳答案

在 Visual Studio 的属性窗口中,您应该可以将资源文件的访问修饰符设置为 public。但是,您将无法使用普通 <%$ Resources:... %> 访问 aspx 文件中的资源。语法,因为它不支持引用程序集中的资源。我遇到了同样的问题并通过实现自定义 ExpressionBuilder 解决了它,但我目前无法访问我的源代码。如果还需要的话,我今晚可以查一下代码。

编辑:好的,这是我解决该问题的方法:

第 1 步:将 resx 文件移动到类库中。它们不需要位于特定文件夹中。在 resx 文件的可视化设计器中,将“Access Modifier”(右上角)设置为“Public”

你现在应该能够

  • 引用 C#/VB 代码中的资源(在库和 Web 项目中),例如,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

    然后我们需要在 web.config 中注册这个 ExpressionBuilder:
    <system.web>
    ...
    <compilation ...>
    <expressionBuilders>
    <add expressionPrefix="Code" type="NamespaceOfYourLibrary.CodeExpressionBuilder" />
    </expressionBuilders>
    </compilation>
    </system.web>

    现在您应该能够执行以下操作:
    <asp:Button runat="server" Text="<%$ Code:[Namespace.]Resources.NameOfResx.MyButtonText %>" />

    信用:我从 Infinites Loop blog 中得到了关于 CodeExpressionBuilder 的想法.如果您更喜欢 C# 而不是 VB,您可以查看那里的代码示例。

    关于asp.net - 在 Web 应用程序之间共享 asp.net 资源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2140628/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com