我有一个名为Localize.resx的资源文件,其中包含英文字符串。我将其复制并粘贴到同一个文件夹(App_GlobalResources)中,VS创建了一个副本,我将副本重命名为Localize.sl.resx,将原始文件重命名为Localize.en.resx。现在,代码隐藏文件(Localize.en.designer.cs)中的所有内容都消失了。删除设计器文件并选择“运行自定义工具”会生成一个新的但完全空白的设计器文件。
我仍然在两个resx中拥有所有字符串,但设计器文件已经消失(空),因此应用程序无法构建。
有什么建议吗?
这是在使用ASP.NET MVC解决方案的Vs 2010中。
答案 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
文件