2

我通过代码使用 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();

到底是怎么回事 ?我做错了什么有什么帮助吗?

这里有点疑惑……

4

0 回答 0