C# 使用其他dll中的附属程序集
我有一个dll,其中包含一些resx文件作为本地化的嵌入资源。 该dll主要用于创建ASP.NET网站,运行良好 但是当我在测试项目中使用dll时(基本上这只是另一个dll),我无法访问卫星程序集内容,例如,我无法访问消息的英文翻译。它只返回回退消息 使用的代码:C# 使用其他dll中的附属程序集,c#,.net,dll,satellite-assembly,C#,.net,Dll,Satellite Assembly,我有一个dll,其中包含一些resx文件作为本地化的嵌入资源。 该dll主要用于创建ASP.NET网站,运行良好 但是当我在测试项目中使用dll时(基本上这只是另一个dll),我无法访问卫星程序集内容,例如,我无法访问消息的英文翻译。它只返回回退消息 使用的代码: ResourceManager _resourceManager = new ResourceManager(baseName, Assembly.GetExecutingAssembly()); _resourceManager.G
ResourceManager _resourceManager = new ResourceManager(baseName, Assembly.GetExecutingAssembly());
_resourceManager.GetString(key, cultureInfo);
baseName是资源的完全限定名,例如:myNamespace.MyResourceName
我认为当项目是dll或网站时,dll的加载是不同的,但我不知道如何正确加载
有人有主意或建议吗
谢谢
编辑:
我有一个带有resx的dll A:
- Messages.resx
- Messages.en.resx
- Messages.de.resx
- 等等
- 动态链接库
- en/A.resources.dll
- de/A.resources.dll
- 等等
但是,如果是另一个dll(如我的单元测试dll)引用dll A,则返回的总是回退消息。我认为您正在加载执行程序集的资源,而不是附属程序集的资源。尝试:
var assembly = Assembly.Load("my.other.namespace");
var manager = new ResourceManager(assembly.GetType().Name + ".Localisation", assembly);
var str = manager(key, cultureInfo);
将
my.other.namespace
替换为附属程序集的完整名称空间。在单元测试中使用ResourceManager时出现问题,languages文件夹未复制到单元测试使用的基本文件夹中,请参见此问题:。这是资源的完整限定名称,与MyNamespace.MyResourceName.exe类似,执行程序集包含所有resx文件,并且是附属程序集的根。在构建结束时,我有:-mainsassembly.dll-en/mainsassembly.resources.dll-etc…您能把问题说得更清楚吗?我读这篇文章是因为DLL A引用了附属DLL B,A中的代码需要访问B的资源。正是这样,除了B有自动生成的附属程序集和本地化内容。我无法访问本地化的内容。好吧,希望我的代码,当放在一个文件夹中时,能够解决这个问题。我相信问题在于Assembly.getExecutionGassembly()
将为您提供A,而我的代码将为您提供B。当然,我可能错了:)我可以向您保证,加载的dll是好的,带有基本/回退消息,但它不会为附属程序集加载其他本地化消息。我已经用我目前的加载方法和你的答案验证了这一点。