使用来自另一个dll的附属程序集

时间:2012-10-09 08:39:24

标签: c# .net dll satellite-assembly

所以,我有一个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:

  • Messages.resx
  • Messages.en.resx
  • Messages.de.resx
  • 等...

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

  • A.DLL
  • 烯/ A.resources.dll
  • DE / A.resources.dll
  • 等...

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

2 个答案:

答案 0 :(得分: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替换为附属程序集的完整命名空间。

答案 1 :(得分:0)

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