2012-08-02 91 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