【问题标题】:How can I read embedded .resx in different assembly如何在不同的程序集中读取嵌入的 .resx
【发布时间】:2015-08-23 19:23:22
【问题描述】:

我的项目中有一些 dll,它们只包含许多 .resx 文件作为嵌入式资源。在每个项目中,.resx 文件都放在不同的文件夹中。 all 的属性“自定义工具名称空间”设置为每个项目的名称空间。 当我尝试使用 ResourceManager 获取字符串时,我收到一个错误,例如“MyTemplate.resources”未找到,但 dll 中只有“MyTemplate.resx”。

如何访问我的资源?

new ResourceManager(typeof(MyTemplate.resx)).GetString("FirstNameTooltip");

正如我在下面的评论中所说,资源是动态变化的。而且我无法直接访问它的属性。

【问题讨论】:

  • 你看到这个问题了吗:stackoverflow.com/questions/6270079/…
  • 你应该给我们看一些代码,我们可以看到你尝试了什么。
  • 谢谢。但我说我在 bin 文件夹中的其他 dll 中有我的 .resx,而不是主项目的属性。
  • 好的,我想我明白你卡在哪里了。我添加了一个答案并改进了您问题的标题以更好地表达问题。 (我希望我做对了。)

标签: c# dll embedded-resource resx resourcemanager


【解决方案1】:

这是我通常的做法:

string mystring = YourResourceNamespace.MyTemplate.FirstNameTooltip;

如果你不知道napespace,点击.resx并双击Designer.cs,然后检查命名空间,所有的关键字都是用gettor定义为简单的静态变量,所以只需调用那些。

如果资源位于另一个项目中,则只需将其包含到您的项目中即可从您的项目中访问它们。

希望对你有帮助

【讨论】:

  • 谢谢。我的问题是我的 .resx 文件类是动态更改的。而且我不知道现在需要哪个课程。资源的类型和资源的键值在变量中更改。我用它来实现 IDataErrorInfo DataAnnotation Validation。
  • 如果你不知道类的命名空间,我没有给你任何解决方案。也许在数据库中存储资源会有所帮助?
  • 我可以得到命名空间。我有类的信息,我知道 typeof(class) 但它的动态变量。如何获取实例?
  • 我有一个 ValidationAttribute 属性。包含 ErrorMessageresourceName & ErrorMessageResourceType & ErrorMessage 。我需要 ErrorMessageResourceType 资源类型中 ErrorMessageresourceName 的值。
  • 您实际上只是希望有不同语言的错误消息用于 UI 验证?
【解决方案2】:

您需要先加载程序集:

Assembly ressourceAssembly = Assembly.Load("ResourceAssembly");

(您可能会遇到一些问题。具体了解动态程序集加载。)

然后创建资源管理器:

ResourceManager myManager = new 
   ResourceManager("<default namespace>.<Resx-Folder>.<Resx-File>", ressourceAssembly);

然后加载字符串:

myManager.GetString("FirstNameTooltip");

【讨论】:

  • 感谢您的宝贵时间。但正如我所说的 ValidationAttribute 类有程序集。问题是 ResourceManager 尝试找到带有 .resources 扩展名的资源文件,我需要使用 .resx 扩展名。还有一点是资源文件不在dll项目的根目录下,它们是按主题放在文件夹中的。
猜你喜欢
  • 2014-02-20
  • 2012-02-04
  • 1970-01-01
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
  • 2012-03-27
  • 2011-09-02
  • 1970-01-01
相关资源
最近更新 更多