在ILMerge Assembly.GetAssembly和类似的抛出ReflectionTypeLoadException之后

时间:2013-06-15 19:38:19

标签: c# reflection ilmerge

我通过代码使用ILMerge,使用以下代码段来获取我合并的.exe(Windows控制台应用程序)

var ilMerge = new ILMerge();
ilMerge.SetInputAssemblies(files);
ilMerge.OutputFile = outputFile;
ilMerge.TargetKind = ILMerging.ILMerge.Kind.Exe;
ilMerge.DebugInfo = true;
ilMerge.SetTargetPlatform("v4", "C:\Windows\Microsoft.NET\Framework64\v4.0.30319");
ilMerge.Closed = true;
ilMerge.Merge();

像魅力一样工作,直到我在其中一个合并的集合中执行类似的操作:

Type[] tlist = Assembly.GetEntryAssembly().GetTypes();

这会抛出 ReflectionTypeLoadException

此Exception包含一个名为“LoaderExceptions”的数组,其中包含一个带有以下消息的 LoaderException

"Could not load type '<>c__DisplayClass38' from assembly 'test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because the method 'CleanWhitespace' has no implementation (no RVA)

CleanWhitespace是我合并的一个程序集中的静态函数,没有什么特别的......

在合并的.exe

中直接调用它没问题

使用...

抛出相同的异常
Assembly.GetCallingAssembly()
Assembly.GetExecutingAssembly()
Assembly.GetAssembly();

发生了什么事?我做错了什么帮助?

在这里有点困惑......

0 个答案:

没有答案