- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
假设您正在处理一个由数百个程序集组成的 .Net 4.0 项目,每个程序集都有自己的本地化资源文件 (.resx)。通过使用 ResXFileCodeGenerator(创建“ResourceFile.Designer.cs”文件)自动生成的类从 C# 访问本地化字符串:string test = ResourceFile.TestString;
每个程序集都有特定于它的本地化字符串,但也有所有程序集通用的字符串。您告诉自己,将这些“通用字符串”放在“父”资源文件中会很好,如果资源键在“本地”资源文件中不可用,代码将回退到这些文件上。然后你说“嘿!继承可以在这里工作。”事实上,在自动生成的设计器文件中做这样的事情确实有效: 内部类 ResourceFile : ParentResourceFile
也就是说,未在 ResourceFile
中定义但在 ParentResourceFile
中定义的字符串仍然可以使用 ResourceFile.StringInParentFile
访问。
但是设计器文件的 header 中有些东西让您感到困扰:“对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,将会丢失。”而且您知道在自动生成的设计器文件中播放是不受欢迎的。所以你来到这里,你问:
然后你说“谢谢”。
最佳答案
在对该问题进行一段时间调查后,我找到了一个解决方法:不对资源文件本身进行继承,而是对需要访问“父”资源的类进行继承。
您只需要有一个基类,其项目包含一个“主”资源文件,并将该资源文件的 CustomTool 属性设置为 PublicResXFileCodeGenerator(“公共(public)”部分很重要,因为它将创建一个public
类,而不是 internal
类)。一个限制是 PublicResXFileCodeGenerator 仅从 VS2008 开始可用(此 CodeProject article 否则可能会有帮助)。
然后,在需要访问“master”资源的类中,简单地继承基类并像这样访问资源:
public class ChildClass : BaseClass
{
string test = BaseClass.BaseResourceFile.TestString; // a common resource
string localResource = ResourceFile.OtherString; // a local resource
}
此解决方案的一个缺点是您必须显式引用 BaseResourceFile 才能访问其中定义的资源;没有回退到父类,就像直接在 Resource 类之间完成继承那样。
为了后代,我会回答我自己的问题:
ResXFileCodeGenerator 何时生成/重新生成设计器上课?
每当添加/删除/修改资源时。
有没有办法关闭自动生成?
没有。而且无论如何,没有自动生成功能的“代码生成器”工具将毫无用处,您不觉得吗?
我们是否必须放弃 ResXFileCodeGenerator 的优势并实现我们的自己处理 ResourceManager?
没有,看上面的回答。
我们还考虑使用“链接”文件(从“添加现有项目”对话框,使用“添加为链接”选项)实现一个解决方案,其中一个父资源文件将链接到我们所有的程序集,但由于我们的程序集已经从基类继承,似乎采用继承方式要好得多。
我不太愿意接受我自己的答案,所以如果有人提出更好的解决方案或改进我的解决方案,我会很乐意接受。也就是说,如果有人关心的话。
关于c# - 如何继承资源文件(resx),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6874820/
我正在尝试确定是否可以将串联字符串添加到我的本地 .resx 文件之一。这个例子应该阐明: 假设我有一个简单的 ASP.NET 网页,它包含 (1) 一个标签,其文本是一个重要的关键字 (2) 一个具
我只是偶尔写代码,这是我能放在一起的最好的,我希望有人能指出我正确的方向。(我一直在寻找其他答案,但他们只让我走到这一步) import xml.etree.ElementTree as ET tre
我正在使用 .NET 2.0 Framework 中的一个 Web 项目,但是当我在 4.0 Framework 中打开该项目时,它给出了无效的 resx 文件错误。我的项目的工作方式是,我有一个空的
在.Net Core official documentation for localization ,提到了如何使 DataAnnotations 由 IStringLocalizer 从一个特殊的
所以我有一个 C# 应用程序。它有一些链接到它的 Assets ,并在编译时被嵌入。应用程序在 Windows 上完美编译和运行。当测试与单声道的兼容性时,一切都是正确的。如果我尝试编译给出一个错误
我被赋予了国际化大型客户端-服务器应用程序的任务。职责是我让应用程序“世界就绪”,然后将编译的应用程序和资源传递给另一个国家的同事进行翻译并发布给他们的客户。会有几个国家,因此会有几个单独的翻译。 这
我想从WPF窗口访问我的Strings.resx文件,但它给了我以下错误: "Strings" does not exist in the namespace "clr-namespa
我们将处理我们的 .resx 文件以进行翻译。由于这些文件除了要翻译的字符串之外还有很多 xml 数据,所以我一直在寻找一种方法来计算已翻译的单词/字符串。我们有 winform 创建的 resx 文
我在单独的 .resx 文件中有 3 组 9 个图像,我正在尝试弄清楚如何将一组循环到 9 个静态图片框中。 Loop through all the resources in a .resx fil
我在一台相当强大的机器上使用 Visual Studio 2010 工作。我有一个解决方案,下面有几个不同的项目 Solution Activations DatabaseManager
我们正在使用一些大型的 asp.net 网络工具包制作网络应用程序。一开始我们创建了很多基类,例如命令和服务器控件,以便于我们的工作。 现在,当我们使用它构建我们的应用程序时,我们决定构建另一个。为了
为什么我不想使用 Resx 文件: 我正在寻找 resx 文件的替代方案来为我的项目提供多语言支持,原因如下: 我不喜欢在编写消息时指定“messageId”,这需要更多的努力,而且对流程来说很烦人,
我的表单有问题,它会生成错误。如果我删除它们,它工作正常,但问题变得有点错误。 this.Icon = ((System.Drawing.Icon)(resources.GetObject("$thi
假设我们有一个 Windows 窗体 Form1,我们为其设置了一个图标。 Visual Studio 会将图标存储在 Form1.resx ($this.Icon) 中。 现在我们决定将应用程序本地
大家好,我是 C# 和本地化的新手,我可以使用它,但我想知道是否有任何预制语言 (resx) 文件可供下载,还是我应该自己从头开始创建它们? 谢谢 巴特 最佳答案 有两种方法可以理解您的问题。 如果是
我有一个生成 DbContext 和迁移配置的 T4 模板。在运行时,我使用该模板创建一个程序集,然后使用该程序集生成一个迁移。但是,当我想更新数据库时,仍然以编程方式进行。但是,我收到一个错误: C
我有一个程序集,其中包含一个 Messages.resx,其中包含 GUI 消息字符串,例如是、否、确定、取消、打开等。我的项目引用了这个程序集。我该如何使用它们? 最佳答案 在资源编辑器中,只需将资
我正在考虑为不同的客户自定义应用程序中的各种文本。 .resx 资源似乎是执行此操作的明智方法。然而,我遇到的所有关于 resx 的文献似乎都是关于语言差异的本地化(如英语、法语、西类牙语等),所以只
我正在处理一个旧项目,正在更新它。该程序的一部分有一个工具条,上面有许多按钮,每个按钮都有一个图像。我发现图像存储在 resx 中的 Base64 编码图像流中,并按如下方式访问: System.Co
我的 .resx 文件出现奇怪的错误: “无效的 Resx 文件。ResX 输入无效。找不到 ResX 读取器和写入器类型名称的有效“resheader”标记。C:\Documents and Set
我是一名优秀的程序员,十分优秀!