我迷上了Assembly.Resolve
事件,并在运行时从嵌入式资源加载程序集。多年来,这一点已经完美运行,而且没有对代码进行任何改动。
最近,我添加了对具有字符串资源的dll(external.dll
)的新引用,当该程序集解决时没有问题,然后它尝试加载字符串(如NameLang
或{{1 }})来自自己的资源(PhoneLang
),并且无法找到资源。大会解析器收到external.resources
的请求,但未能找到它们。
要清楚,没有Satellite程序集,资源在external.resources
内,虽然我知道你可以重新编译DLL以将资源作为卫星程序集放在DLL旁边,但是这不是那种编译方式。另外,当我使用Telerik JustDecompile时,我可以看到资源字符串(external.dll
和NameLang
),所以我知道它们存在于程序集中。
所以,我想也许我可以通过向我的程序集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事件中加载嵌入式字符串资源?
(其次是:为什么在加载程序集后它无法找到它的资源?)