Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用其他dll中的附属程序集_C#_.net_Dll_Satellite Assembly - Fatal编程技术网

C# 使用其他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

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

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

使用的代码:

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
  • 等等
在构建结束时,它会生成一些DLL:

  • 动态链接库
  • en/A.resources.dll
  • de/A.resources.dll
  • 等等
如果某个网站引用了dll A,则该网站可以访问本地化资源,如en或de中的消息。
但是,如果是另一个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是好的,带有基本/回退消息,但它不会为附属程序集加载其他本地化消息。我已经用我目前的加载方法和你的答案验证了这一点。