2

我有一个应用程序可以在 IIS Express 中正确本地化,但在部署到服务器(IIS 7.5)后会导致错误消息,但仅限于使用表达式语法的地方,例如<asp:localize id="fooctrl" text="<%$ Resources:SiteResources, Foo_Key %>" runat="server" />. 在我在 IIS Express 中运行的本地计算机上,这非常有效。但是一旦部署到服务器,这将导致错误:

找不到键为“Foo_Key”的资源对象。

我可以在后面的代码中将属性设置为资源键,而不会出现这样的问题:

fooctrl.Text = SiteResource.Foo_Key;

我还可以使用文字服务器端标记或编码的服务器端标记输出资源字符串,没有问题:

<%= SiteResource.Foo_Key %>
<%: SiteResource.Foo_Fey %>

我不认为这是一个部署问题,因为它只是似乎不起作用的表达式语法。我想了解我做错了什么或可能导致部署行为的原因?我真的不想在后面的代码中设置服务器控件的所有本地化属性。

更多信息

对于 sh_ts 和 gr_ns,我将 App_GlobalResources 文件夹复制到服务器。我的错误消失了。这使我将资源构建操作从 更改Embedded Resource为 ,Content以便它们与应用程序一起发布。虽然文件夹和 resx 文件在发布后确实出现在服务器上,但我收到错误消息:“找不到任何适合指定文化或中性文化的资源。”

所以这让我对嵌入式资源有点困惑。如果我需要服务器上的资源文件,实际嵌入了什么?如果我不仅需要嵌入资源,如何让 Visual Studio 2012 的 Publish Web 同时编译资源并复制文件,就好像它们是内容一样?我找不到任何设置来做到这一点。

更多信息

我今天将资源移至外部程序集,以支持本地化除 Web 应用程序之外的其他支持程序集。我从我的 Web 应用程序中删除了资源文件,添加了对所有适用项目的引用,更新了我的引用等。一切都像 IIS Express 中的重磅炸弹一样工作。Web 应用程序本地化很好,外部程序集本地化很好,但是当我部署到 IIS 7.5 时,Web 应用程序无法本地化。与以前一样处理表达式语法。再次部署 .resx 文件解决了该错误。

我不明白问题是什么。据我所知,这些资源是正确的,如下所示:

Resx 属性

我什至使用 JetBrains dotPeek 来反编译资源程序集,我可以看到嵌入的 XML 完整,其中每个都有值。

4

1 回答 1

0

为了使用表达式语法在 ASP.NET 应用程序中使用嵌入式资源,需要做四件事:

  1. 自定义资源提供者工厂
  2. 自定义资源提供者
  3. 自定义表达式生成器
  4. 参考<compilation><expressionBuilders></expresionBuilders></compilation>部分中的自定义 ExpressionBuilder

这篇文章详细说明了如何去做,并包括完整的源代码控制。

于 2013-05-07T16:45:30.407 回答