我通过代码使用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();
发生了什么事?我做错了什么帮助?
在这里有点困惑......