C# 加载外部dll';s AssemblyResolve事件中的字符串资源
我被C# 加载外部dll';s AssemblyResolve事件中的字符串资源,c#,.net-assembly,embedded-resource,assembly-resolution,C#,.net Assembly,Embedded Resource,Assembly Resolution,我被程序集钩住了。解析事件并在运行时从嵌入式资源加载程序集。多年来,这些代码一直在完美地工作,没有对代码进行任何更改 最近,我添加了一个对dll(external.dll)的新引用,该dll具有字符串资源,当该程序集解决问题时,它会尝试从自己的资源(external.Resources)加载字符串(如NameLang或PhoneLang),但无法找到资源。程序集解析程序接收到对外部.resources的请求,但未能找到它们 要明确的是,没有附属程序集,资源位于external.dll中,尽管我知
程序集钩住了。解析事件并在运行时从嵌入式资源加载程序集。多年来,这些代码一直在完美地工作,没有对代码进行任何更改
最近,我添加了一个对dll(external.dll
)的新引用,该dll具有字符串资源,当该程序集解决问题时,它会尝试从自己的资源(external.Resources
)加载字符串(如NameLang
或PhoneLang
),但无法找到资源。程序集解析程序接收到对外部.resources
的请求,但未能找到它们
要明确的是,没有附属程序集,资源位于external.dll
中,尽管我知道您可以重新编译dll,将资源作为附属程序集与dll一起,但这不是以这种方式编译的。此外,当我使用Telerik JustDecompile时,我可以看到资源字符串(NameLang
和PhoneLang
),因此我知道它们存在于程序集中
因此,我想也许我可以通过向我的程序集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
因此,我的主要问题是:当程序集解析事件查找外部.Resources
时,如何从中加载嵌入的字符串资源
(第二:为什么在加载程序集后它不能找到它的资源?这可能很有用: