所以,我有一个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:
在构建结束时,它会生成一些dll:
如果网站引用了dll A,则网站可以访问本地化资源,例如en或de中的消息。 但是,如果它是另一个dll,比如我的单元测试dll引用了dll A,它总是返回的回退消息。
答案 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。