我通过代码使用 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
此异常包含一个名为“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();
到底是怎么回事 ?我做错了什么有什么帮助吗?
这里有点疑惑……