资源(RESX)文件搞砸了

时间:2010-07-27 12:56:19

标签: asp.net-mvc visual-studio visual-studio-2010 resources resx

我有一个名为Localize.resx的资源文件,其中包含英文字符串。我将其复制并粘贴到同一个文件夹(App_GlobalResources)中,VS创建了一个副本,我将副本重命名为Localize.sl.resx,将原始文件重命名为Localize.en.resx。现在,代码隐藏文件(Localize.en.designer.cs)中的所有内容都消失了。删除设计器文件并选择“运行自定义工具”会生成一个新的但完全空白的设计器文件。

我仍然在两个resx中拥有所有字符串,但设计器文件已经消失(空),因此应用程序无法构建。

有什么建议吗?

这是在使用ASP.NET MVC解决方案的Vs 2010中。

5 个答案:

答案 0 :(得分:9)

我遇到了同样的问题 - 某些resx文件没有出现Designer.cs文件。

修复方法是设置resx文件的属性:

Build Action - Embedded Resource
Custom Tool  - PublicResXFileCodeGenerator

答案 1 :(得分:8)

这是ASP.NET documentation关于资源文件的说法。

它没有具体谈论动态生成的代码隐藏设计器文件,但如果你仔细阅读粗体文本,它实质上是说你需要没有指定语言的基本文件,并且鉴于此,只有这个文件才有意义将包括自动生成的代码。

当您创建资源文件时,首先要创建一个基本.resx文件。对于您要支持的每种语言,创建一个具有相同文件名的新文件。但是在名称中,包括语言或语言和文化(文化名称)。有关文化名称的列表,请参阅CultureInfo类。例如,您可以创建以下文件:

•WebResources.resx

基本资源文件。这是默认(回退)资源文件。

•WebResources.es.resx

西班牙语的资源文件。

•WebResources.es-mx.resx

西班牙语(墨西哥)的资源文件。

•WebResources.de.resx

德语的资源文件。“

我实际上从来没有注意到这一点,但当我去检查我的旧项目时,我看到他们都有基本文件,然后是语言特定的。所以我只是纠正它以遵循该惯例,它现在有效。

答案 2 :(得分:2)

如果我是你,我会:

创建一个新的resx文件; 打开旧的; 按旧的ctrl + a; 在新的按ctrl + v; 保存新的; 删除旧的; 重命名新的:)

这应该能够快速解决问题。 您还可以通过单击show all按钮

来检查是否未从文件中排除cs文件

答案 3 :(得分:0)

很抱歉用此来撰写评论。我的声誉实际上低于50 =(但我认为这也很重要。

这引起了Alvis'回答: 你的解决方案成功了。但我还要修改基础设计器代码文件中属性的访问修饰符,从内部到公共。否则,我在尝试访问xaml中的resx时会得到XmlParseExceptions。

编辑: 所以这引用了C#/ WPF。在ASP.NET中可能有所不同

答案 4 :(得分:0)

我发现最好的方法是:

  • 创建默认文件: Resource1.resx
  • 让它创建: Resource1.Desinger.cs
  • 将其重命名为所需的语言,例如Localize.en.resx

对我来说,其他任何方法都只是停止创建X.Designer.cs文件