0

我有一个 dll,其中包含一些 resx 文件作为本地化的 EmbeddedResources。该 dll 主要用于创建 ASP.NET 网站,并且运行良好。

但是当我在我的测试项目中使用 dll(基本上这只是另一个 dll)时,我无法访问附属程序集的内容,例如我无法访问我的消息的英文翻译。它只返回回退消息。

使用的代码:

ResourceManager _resourceManager = new ResourceManager(baseName, Assembly.GetExecutingAssembly());
_resourceManager.GetString(key, cultureInfo);

baseName 是资源的完全限定名称,例如:myNamespace.MyResourceName。

我在想,当项目是 dll 或网站时,dll 的加载是不同的,但我不知道如何正确加载它。

有人有想法或提示吗?

谢谢。

编辑:我有一些 resx 的 dll A:

  • 消息.resx
  • Messages.en.resx
  • 消息.de.resx
  • ETC...

在构建结束时,它会生成一些 dll:

  • A.dll
  • zh/A.resources.dll
  • de/A.resources.dll
  • ETC...

如果 dll A 被网站引用,则该网站可以访问本地化资源,例如 en 或 de 中的消息。但是,如果它是另一个 dll,比如我的单元测试 dll,它引用了 dll A,它总是返回的后备消息。

4

2 回答 2

0

我认为您正在加载执行程序集的资源,而不是附属程序集。尝试:

var assembly = Assembly.Load("my.other.namespace");
var manager =  new ResourceManager(assembly.GetType().Name + ".Localisation", assembly);

var str = manager(key, cultureInfo);

替换my.other.namespace为附属程序集的完整命名空间。

于 2012-10-09T09:42:25.767 回答
0

看来问题来自在单元测试中使用 ResourceManager,语言文件夹没有复制到单元测试使用的基本文件夹中,请参阅这个问题:ResourceManager.GetString failed in unit tests

于 2012-10-09T13:49:44.667 回答