2012-08-02 96 views
4

我正在使用ILMerge版本2.11.1103.0将4个DLL合并到一个新程序集中。假设他们被称为A,B,C,和d,它们的关系如下:ILMerge程序集未正确合并

B -> A 
C -> A 
D -> A 
D -> C 

当我在A,B和C运行ILMerge,这一切工作完全正常。然而,当我加入DI收到以下错误:

An exception occurred during merging: 
ILMerge.Merge: The assembly 'A' was not merged in correctly. 
It is still listed as an external reference in the target assembly. 
    at ILMerging.ILMerge.Merge() 
    at ILMerging.ILMerge.Main(String[] args) 

我一直在使用如下所示ILMerge DLL: Assembly not merged in correctly, still listed as an external reference的/关闭的选项尝试,但遗憾的是它并没有帮助:

In order to close the target assembly, the number of assemblies to be added to the input is 0. 

当我改变的顺序组件,我收到以下异常:

An exception occurred during merging: 
Index was outside the bounds of the array. 
    at System.Compiler.ISymUnmanagedWriter.CloseMethod() 
    at System.Compiler.Ir2md.VisitMethodBody(Method method) 
    at System.Compiler.Ir2md.VisitMethod(Method method) 
    at System.Compiler.Ir2md.Visit(Node node) 
    at System.Compiler.Ir2md.VisitClass(Class Class) 
    at System.Compiler.Ir2md.Visit(Node node) 
    at System.Compiler.Ir2md.VisitModule(Module module) 
    at System.Compiler.Ir2md.SetupMetadataWriter(String debugSymbolsLocation) 
    at System.Compiler.Ir2md.WritePE(Module module, String debugSymbolsLocation, BinaryWriter writer) 
    at System.Compiler.Writer.WritePE(String location, Boolean writeDebugSymbols, Module module, Boolean delaySign, String keyFileName, String keyName) 
    at System.Compiler.Writer.WritePE(CompilerParameters compilerParameters, Module module) 
    at System.Compiler.Module.WriteModule(String location, CompilerParameters options) 
    at ILMerging.ILMerge.Merge() 
    at ILMerging.ILMerge.Main(String[] args) 

我使用的完整命令行是:

ILMerge.exe /targetplatform:v4,"C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0" /log:ilmerge.log /target:library /union /xmldocs /copyattrs /allowMultiple /internalize /closed /keyfile:keyfile.snk /out:Merged.dll A B C D 

任何人都可以看到我做错了什么?谢谢。

+1

将连接到电子邮件的程序集发送给Microsoft Research的Mike Barnett。他过去一直很有回应,所以你会有一些可能会听到的声音。他的电子邮件地址位于此页面上:http://research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx – 2012-08-02 21:23:09

+0

太棒了,谢谢。会试一试。 – Mightymuke 2012-08-02 22:15:36

+0

对我而言,这个错误是非破坏性的。合并的DLL通过所有单元测试并检查程序集显示一切都在那里。所以不确定哪些元素“没有正确合并”。 – 2015-12-22 15:59:36

回答

4

正如@HansPassant在上面的评论中所建议的那样,我联系了微软公司的Mike Barnett。他能够帮我解决这个问题:

  • 升级到ilmerge(2.12.0803)的最新版本,从http://nuget.org/packages/ilmerge

  • 从命令删除/工会开关此以前添加(解决了由代码合同重写器重写的合并程序集上运行宪兵的问题。幸好由于构建过程中的变化,这已不再需要)。

1

我遇到过ILMerge不工作的问题。我想他们只是个bug ...尝试在多个阶段合并,例如将B和A合并到A'中,然后将A'与C和D合并。也许这会产生可能导致解决方案的不同结果/错误。

+0

谢谢。不幸的是我已经尝试过,结果相同。我想我会继续抨击它,看看我能否发现一些东西。 :( – Mightymuke 2012-08-02 20:31:30

+0

呵呵,这对我来说简直就是了。简单的WCF合约程序集。合并共享到主程序不断给我外部引用异常。使用/关闭没有帮助。我拼命切换顺序,它工作。当前最新版本,2.13.0307) – 2013-04-11 12:13:04