从AssemblyResolve事件加载外部DLL的字符串资源

时间:2017-03-15 21:42:46

标签: c# .net-assembly embedded-resource assembly-resolution

我迷上了Assembly.Resolve事件,并在运行时从嵌入式资源加载程序集。多年来,这一点已经完美运行,而且没有对代码进行任何改动。

最近,我添加了对具有字符串资源的dll(external.dll)的新引用,当该程序集解决时没有问题,然后它尝试加载字符串(如NameLang或{{1 }})来自自己的资源(PhoneLang),并且无法找到资源。大会解析器收到external.resources的请求,但未能找到它们。

要清楚,没有Satellite程序集,资源在external.resources内,虽然我知道你可以重新编译DLL以将资源作为卫星程序集放在DLL旁边,但是这不是那种编译方式。另外,当我使用Telerik JustDecompile时,我可以看到资源字符串(external.dllNameLang),所以我知道它们存在于程序集中。

所以,我想也许我可以通过向我的程序集PhoneLang添加一个条件fork来解决这个问题,从拥有程序集中提取资源的字节数组,并将其加载到域中但是我只是得到ResolveEventHandler,因为数据不是汇编,它是一个嵌入式资源文件,这是有道理的。

System.BadImageFormatException

所以我的主要问题是:如何在寻找//^^^get assembly bytes from embedded resource, works var asm = Assembly.Load(dllBytes); if (!resourceToFind.Contains(".resources")) return asm; else var resourceNames = asm.GetManifestResourceNames(); var resourceName = resourceNames.FirstOrDefault(); var assemblyData = LoadResourceBytes(asm, resourceName); return Assembly.Load assemblyData; //^^^System.BadImageFormatException: Bad IL format. Silly me thinking it would work 时从Assembly Resolve事件中加载嵌入式字符串资源?

(其次是:为什么在加载程序集后它无法找到它的资源?)

0 个答案:

没有答案