13

我有一个在 VS 2008 中运行的网络项目。我们在 App_GlobalResources 文件夹中有一些全局资源文件 (*.resx) 用于国际化。所有这些都像我在 VS 中安装的本地 IIS 的魅力一样。

但是当我将我的网络项目发布到本地文件系统和/或另一台服务器时,所有资源都找不到了。所以我猜预编译会以某种方式破坏东西。当我调用预编译的 web 时,我得到一个错误,即无法找到带有键 xyz 的资源对象,尽管它之前可以找到。

我使用 .NET 反射器检查了资源是否进入 *.dll。所有这些标识符都在那里(bin/Web.dll、bin/<culture>/Web.resources.dll)。标识符的加载方式如下:

<asp:MenuItem NavigateUrl="~/OrderNew.aspx" Text="<%$ Resources:MyProject, MenuNewOrder %>" Value="NewOrder">

资源文件称为 MyProject.resx 和 MyProject.<culture>.resx,其中 <culture> 对应于特定的文化(即 MyProject.de-DE.resx)。

任何想法如何解决这个问题?

我真的很感激任何帮助。

谢谢

编辑:

如果我手动将 App_GlobalResources 文件夹复制到输出,则资源可能会正常加载。所以我真的很想知道这个预编译是关于什么的。

我仍然对“以正确的方式”解决问题感兴趣。

4

4 回答 4

13

我遇到了同样的问题,不得不对 resx 文件属性进行两次更改。

  1. 将“构建操作”设置为内容
  2. 将“复制到输出目录”设置为始终复制
于 2009-06-02T02:23:54.893 回答
2

(我无法评论之前的答案......还没有声誉......?)

恐怕这并没有解决我的问题。

在尝试“始终内容/复制”解决方案时,我收到一个异常,指出编译时的链接不起作用。

为什么asp.net编译资源的时候需要resx文件!?

于 2010-05-27T09:07:35.837 回答
1

从另一个项目复制资源文件时出现此错误。

我通过删除全局资源、添加新资源并将data元素从旧 XML 复制到新 XML 来解决这个问题。

这会导致资源的以下设置:

  <ItemGroup>
    <Content Include="App_GlobalResources\Global.resx">
      <Generator>GlobalResourceProxyGenerator</Generator>
      <LastGenOutput>Global.Designer.cs</LastGenOutput>
    </Content>
  </ItemGroup>
于 2012-01-12T08:57:39.693 回答
0

我遇到过同样的问题。每当我将我的应用程序发布到 Small Business Server (SBS2008) 时,它都会停留在控制名称行上,但实际上是 meta:resourcekey 的一部分。上述解决方案都没有帮助我。

我花了 6 个小时解决这个问题,最后我意识到这是在我在服务器上进行一些文件夹清理时发生的。一开始我所有的应用程序都位于 E: 在他们的文件夹中,但后来我创建了文件夹,其名称指示应用程序 ApplicationPools 并且我将相应的应用程序移动到那里。

我不知道我的 SBS 上的 IIS7 是如何寻找资源文件的,但这绝对是问题所在。当我带着我的应用程序回到 E: 时,一切又开始像魅力一样工作了。

于 2013-02-06T15:09:13.970 回答